Flutter插件lexactivator的使用_LexActivator是一个用于Dart语言的许可证库API包装器

Flutter插件lexactivator的使用_LexActivator是一个用于Dart语言的许可证库API包装器

LexActivator 是一个用于Dart语言的许可证库API包装器。它可以帮助开发者实现应用程序的许可证管理,包括激活、验证和管理许可证状态等功能。

开始使用Flutter插件lexactivator

首先,你需要将 Product.dat 文件嵌入到你的应用中,或者设置该文件的绝对路径。接着,你需要在代码中设置产品的ID。

void initializeLexActivator() {
  LexActivator.SetProductData(productData: "PASTE_CONTENT_OF_PRODUCT.DAT_FILE");

  LexActivator.SetProductId(
      productId: "PASTE_PRODUCT_ID", flags: LexActivator.LA_USER);
}

许可证激活

要通过许可证密钥激活许可证,你可以使用 ActivateLicense() 函数。这会调用 Cryptlex Web API 的 /v3/activations 端点,并验证加密和数字签名的响应来确认许可证的有效性。

void activateLicense() {
  LexActivator.SetLicenseKey(licenseKey: 'PASTE_LICENSE_KEY');
  LexActivator.SetActivationMetadata(key: 'Metadata 1', value: 'Value 1');
  final status = LexActivator.ActivateLicense();
  if (LexStatusCodes.LA_OK == status) {
    print('License activated successfully!');
  } else if (LexStatusCodes.LA_EXPIRED == status) {
    print('License activated successfully but has expired!');
  } else if (LexStatusCodes.LA_SUSPENDED == status) {
    print('License activated successfully but has been suspended!');
  }
}

上述代码应在许可证激活时执行。

验证许可证激活

每次应用程序启动时,你需要验证许可证是否已经激活。这可以通过本地验证许可证的数字签名来完成。理想情况下,它还应异步联系 Cryptlex 服务器以定期验证和同步许可证激活状态。为此,你可以使用 IsLicenseGenuine() 函数。

void main() {
  try {
    initializeLexActivator();
    activateLicense(); // 运行一次,在首次运行时。

    final status = LexActivator.IsLicenseGenuine();
    if (LexStatusCodes.LA_OK == status) {
      print('License is genuinely activated!');

      final expiryDate = LexActivator.GetLicenseExpiryDate();
      final daysLeft = DateTime.fromMillisecondsSinceEpoch(expiryDate)
          .difference(DateTime.now());
      print('Days left: $daysLeft');

      final userName = LexActivator.GetLicenseUserName();
      print('License user name: $userName');
    } else if (LexStatusCodes.LA_EXPIRED == status) {
      print('License is genuinely activated but has expired!');
    } else if (LexStatusCodes.LA_SUSPENDED == status) {
      print('License is genuinely activated but has been suspended!');
    } else if (LexStatusCodes.LA_GRACE_PERIOD_OVER == status) {
      print('License is genuinely activated but grace period is over!');
    } else {
      final trialStatus = LexActivator.IsTrialGenuine();
      if (LexStatusCodes.LA_OK == trialStatus) {
        final expiryDate = LexActivator.GetTrialExpiryDate();
        final daysLeft = DateTime.fromMillisecondsSinceEpoch(expiryDate)
            .difference(DateTime.now());
        print('Trial days left: $daysLeft');
      } else if (LexStatusCodes.LA_TRIAL_EXPIRED == trialStatus) {
        print('Trial has expired!');
        // 到了购买许可证并激活应用程序的时间
        activateLicense();
      } else {
        print('Either trial has not started or has been tampered!');
        // 激活试用版
        activateTrial();
      }
    }
  } on LexActivatorException catch (e) {
    print(e);
  }
}

上述代码应在每次用户启动应用程序时执行。本地验证后,它会在单独的线程中安排周期性的服务器检查。

完整示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 LexActivator 插件:

// ignore_for_file: avoid_print
import 'package:lexactivator/lexactivator.dart';

void main() {
  try {
    initializeLexActivator();
    activateLicense();

    final status = LexActivator.IsLicenseGenuine();
    if (LexStatusCodes.LA_OK == status) {
      print('License is genuinely activated!');

      final expiryDate = LexActivator.GetLicenseExpiryDate();
      final daysLeft = (DateTime.fromMillisecondsSinceEpoch(expiryDate * 1000))
          .difference(DateTime.now())
          .inDays;
      print('Days left: $daysLeft');

      final userName = LexActivator.GetLicenseUserName();
      print('License user name: $userName');
    } else if (LexStatusCodes.LA_EXPIRED == status) {
      print('License is genuinely activated but has expired!');
    } else if (LexStatusCodes.LA_SUSPENDED == status) {
      print('License is genuinely activated but has been suspended!');
    } else if (LexStatusCodes.LA_GRACE_PERIOD_OVER == status) {
      print('License is genuinely activated but grace period is over!');
    } else {
      final trialStatus = LexActivator.IsTrialGenuine();
      if (LexStatusCodes.LA_OK == trialStatus) {
        final expiryDate = LexActivator.GetTrialExpiryDate();
        final daysLeft = (DateTime.fromMillisecondsSinceEpoch(expiryDate * 1000))
            .difference(DateTime.now())
            .inDays;
        print('Trial days left: $daysLeft');
      } else if (LexStatusCodes.LA_TRIAL_EXPIRED == trialStatus) {
        print('Trial has expired!');
        // 到了购买许可证并激活应用程序的时间
        activateLicense();
      } else {
        print('Either trial has not started or has been tampered!');
        // 激活试用版
        activateTrial();
      }
    }
  } on LexActivatorException catch (e) {
    print(e);
  }
}

/// 初始化函数总是在应用程序开始时或在使用 LexActivator 范围内调用。
void initializeLexActivator() {
  LexActivator.SetProductData(productData: "PASTE_CONTENT_OF_PRODUCT.DAT_FILE");

  LexActivator.SetProductId(
      productId: "PASTE_PRODUCT_ID", flags: LexActivator.LA_USER);

  LexActivator.SetAppVersion(appVersion: 'PASTE_YOUR_APP_VERSION');
}

/// 激活函数仅在许可证激活时调用一次。再次调用此函数是不必要的。
void activateLicense() {
  LexActivator.SetLicenseKey(licenseKey: 'PASTE_LICENSE_KEY');
  LexActivator.SetActivationMetadata(key: 'Metadata 1', value: 'Value 1');
  final status = LexActivator.ActivateLicense();
  if (LexStatusCodes.LA_OK == status) {
    print('License activated successfully!');
  } else if (LexStatusCodes.LA_EXPIRED == status) {
    print('License activated successfully but has expired!');
  } else if (LexStatusCodes.LA_SUSPENDED == status) {
    print('License activated successfully but has been suspended!');
  }
}

void activateTrial() {
  LexActivator.SetTrialActivationMetadata(
      key: 'Trial Metadata 1', value: 'Value 1');
  final status = LexActivator.ActivateTrial();
  if (LexStatusCodes.LA_OK == status) {
    print('Product trial activated successfully!');
  } else if (LexStatusCodes.LA_TRIAL_EXPIRED == status) {
    print('Product trial has expired!');
  } else {
    print('Product trial activation failed: $status');
  }
}

更多关于Flutter插件lexactivator的使用_LexActivator是一个用于Dart语言的许可证库API包装器的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter插件lexactivator的使用_LexActivator是一个用于Dart语言的许可证库API包装器的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


lexactivator 是一个用于软件许可管理的插件,通常用于 Flutter 应用程序中,帮助开发者实现软件激活、许可证验证、试用期管理等功能。它通常与第三方许可管理服务(如 Cryptlex)结合使用,以保护软件不被未经授权的用户使用。

以下是 lexactivator 插件的潜在用途和功能探索:


1. 软件激活管理

  • 用途: 确保用户通过合法的许可证激活软件。
  • 实现方式:
    • 用户输入许可证密钥后,插件会与服务器验证密钥的有效性。
    • 如果密钥有效,软件将被激活;否则,软件将保持未激活状态。

2. 试用期管理

  • 用途: 为软件提供有限时间的试用期,试用期结束后要求用户购买许可证。
  • 实现方式:
    • 插件可以跟踪用户首次启动应用的时间,并根据设定的试用期限(如 30 天)限制功能使用。
    • 试用期结束后,提示用户购买许可证。

3. 许可证验证

  • 用途: 定期验证许可证的有效性,防止许可证被滥用或破解。
  • 实现方式:
    • 插件可以定期与服务器通信,检查许可证是否仍然有效。
    • 如果许可证被吊销或过期,软件将停止运行或限制功能。

4. 多设备限制

  • 用途: 限制同一许可证在多个设备上的使用。
  • 实现方式:
    • 插件可以绑定许可证到特定设备,防止用户在多个设备上同时使用同一许可证。

5. 功能解锁

  • 用途: 根据许可证类型解锁不同的软件功能。
  • 实现方式:
    • 插件可以根据许可证的等级(如基础版、专业版)启用或禁用特定功能。

6. 离线激活

  • 用途: 允许用户在无法访问互联网的情况下激活软件。
  • 实现方式:
    • 插件可以生成离线激活请求文件,用户将其发送给开发者进行手动激活。

7. 许可证转移

  • 用途: 允许用户将许可证从一台设备转移到另一台设备。
  • 实现方式:
    • 插件可以解除当前设备的许可证绑定,并允许用户在新设备上重新激活。

8. 防止破解和滥用

  • 用途: 通过加密和验证机制防止软件被破解或滥用。
  • 实现方式:
    • 插件使用加密技术保护许可证数据,并通过服务器验证防止本地篡改。

9. 用户数据分析

  • 用途: 收集和分析许可证使用数据,帮助开发者了解用户行为。
  • 实现方式:
    • 插件可以记录许可证的激活时间、使用频率等信息,并将其发送到服务器供开发者分析。

10. 多平台支持

  • 用途: 在多个平台(如 Windows、macOS、Linux、Android、iOS)上统一管理许可证。
  • 实现方式:
    • 插件支持跨平台使用,开发者可以使用同一套许可证管理逻辑覆盖所有目标平台。

实际应用场景

  • 商业软件: 保护付费软件的版权,确保只有购买许可证的用户才能使用完整功能。
  • SaaS 应用: 限制用户的使用权限,确保只有订阅用户才能访问高级功能。
  • 游戏: 提供试玩功能,试玩期结束后要求用户购买完整版。

如何使用 lexactivator 插件

  1. 集成插件: 在 pubspec.yaml 中添加 lexactivator 插件的依赖。
    dependencies:
      lexactivator: ^版本号
回到顶部