开发者控制台

DRM示例应用

DRM示例应用

通过这个示例应用,您将了解如何使用DRM概述中所述的代码,在应用中引入DRM许可证检查。浏览示例应用有助于您了解如何结合环境情况来引入DRM。示例应用可以在Fire TV或Fire平板电脑上运行。

步骤1: 使用必要的资产

首先,收集项目所必需的所有资产。下载并解压缩以下内容:

  • DRM示例应用 - Appstore SDK的一部分
  • Appstore SDK - 请参阅SDK下载
  • Amazon App Tester(在您的Fire设备上)- 从此处下载App Tester

您还需要AppstoreAuthenticationKey.pem文件,该文件可以在教程的步骤3中下载。

此外,您还需要使用:

步骤2: 在示例应用中添加Appstore SDK JAR

Appstore SDK JAR不会自动打包到您要创建的DRM示例应用中。(否则,每次Appstore SDK发布新版本后,示例应用便会过期)。要将SDK JAR添加到示例应用中,请执行以下操作:

  1. 打开Android Studio,然后选择Open an existing Android Studio project(打开现有Android Studio项目)
  2. 浏览至SampleDRMApplication文件夹并将其选中。然后单击Open(打开)
  3. 更改为Project(项目)视图。

    “Project”视图
    “Project”视图
  4. 复制amazon-appstore-sdk-[x].jar文件。
  5. 在Android Studio项目中,展开app并选择libs。将amazon-appstore-sdk-[x].jar文件粘贴到此目录中。
  6. 展开app文件夹并打开build.gradle文件。在添加的amazon-appstore-sdk-[x].jar文件上自定义依赖项。例如,如果Appstore SDK版本为3.0.3,代码将如下所示:

    dependencies {
        implementation files('libs/amazon-appstore-sdk-3.0.3.jar')
    }
    
  7. 转到Build(构建)> Rebuild Project(重建项目)以构建项目。

    Gradle会获取所需资产并构建项目,因此,Android Studio可能需要几分钟时间来构建项目。如果Android Studio需要特定的文件或库,系统会提示下载。安装完所需资产后,Android Studio将重建项目。

步骤3: 在项目的资产中添加PEM文件

要将PEM文件添加到示例应用中,请执行以下操作:

  1. 使用开发者账户登录开发者控制台
  2. 如果您已有应用,请转到应用与服务 > 我的应用程序。然后单击您的应用。如果您还没有应用,请参阅将应用提交到亚马逊应用商店
  3. 创建应用的新版本。在应用名称下方,单击即将推出的版本

  4. 转到上传您的应用文件屏幕。
  5. Additional information(其他信息)部分,单击View public key(查看公有密钥)。
  6. 在显示的“公有密钥”对话框中,单击AppstoreAuthenticationKey.pem链接,下载PEM文件。该文件包含您的公有密钥。

    显示公有密钥字符串的“公有密钥”窗口。显示一个下载图标,后接链接文本“AppstoreAuthenticationKey.pem”。
    PEM文件下载链接
  7. 复制AppstoreAuthenticationKey.pem文件,将其粘贴到Android Studio项目的app/src/main/assets文件夹中。

步骤4: 通过ADB连接到Fire设备

通过ADB将计算机连接至Fire TV或Fire平板电脑。(示例应用会在Fire TV或 Fire平板电脑上运行。) 有关详细信息,请参阅以下任一内容:

在示例应用中,请注意AndroidManifest.xml文件(位于“app”>“src”>“main”中)定义了以下功能:

<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />

touchscreen属性设置为false以支持Fire TV。如果不这样设置,Fire TV设备就无法支持您的应用。

步骤5: 在Fire设备上安装Amazon App Tester

开发包含DRM或IAP(两者均需要与亚马逊应用商店进行通信)的应用时,可以使用名为Amazon App Tester的APK对应用进行测试。Amazon App Tester应用会模拟亚马逊应用商店客户端。要设置Amazon App Tester,请执行以下操作:

  1. 如果您已经安装了Amazon App Tester的先前版本,请先将其卸载。(请注意,此应用不同于网页应用测试器。)
  2. 在终端或命令提示符中,浏览至Amazon App Tester APK的下载目录。
  3. 使用ADB在Fire设备上安装该APK:

    adb install -r amazon-app-tester.apk
    

    在已安装App Tester的情况下,-r参数将重新安装该APK。

  4. 在Fire设备上打开Amazon App Tester应用。要找到已安装的应用,请参阅以下内容:

    • Fire平板电脑: 单击Games & Apps(游戏与应用)菜单,然后单击Library(资源库)。在Amazon App Tester旁边,单击Open(打开)。(如果没有看到该应用,请检查Updates(更新)选项卡。)
    • Fire TV: 转到Settings(设置)并单击Applications(应用)。单击Manage Installed Applications(管理已安装应用)。单击Amazon App Tester,然后选择Launch application(启动应用)。
  5. 单击Appstore SDK API的横幅。
  6. 单击DRM API Response Settings(DRM API响应设置)。

    如果没有看到DRM API Response Settings选项,则表示您使用的Amazon App Tester并非最新版本。

  7. 为应用选择所需的许可证状态。如果将其保留为Default(默认),则将使用LICENSED(已获许可)状态。

    DRM API响应设置
    App Tester中DRM API响应设置

步骤6: 进入沙盒模式

沙盒模式会对通常发送到亚马逊应用商店客户端的调用加以限制,转而将其路由至Amazon App Tester。此模式仅可用于本地测试。

  1. 在您通过ADB与Fire设备进行连接的同一终端中,进入沙盒模式:

    adb shell setprop debug.amazon.sandboxmode debug
    

    (请注意,如果需要退出沙盒模式,请运行:adb shell setprop debug.amazon.sandboxmode none。)

    每次通过ADB重新连接到Fire设备时,都需要重新启动沙盒模式。

步骤7: 运行应用

  1. 在Android Studio中,单击Logcat选项卡并按LicenseResponse筛选。
  2. 单击Run App(运行应用)按钮 运行“app”,在Fire设备上运行应用。

    示例应用仅有一个用于显示许可证状态的基本屏幕。LICENSED许可证状态如下所示:

    DRM示例应用主屏幕
    DRM示例应用主屏幕

    NOT_LICENSED响应如下所示:

    许可证失败
    许可证失败
  3. 您还可以观察控制台中记录的许可证状态消息。

    根据LicenseResponse筛选的Logcat
    根据LicenseResponse筛选的Logcat

如果您在app/src/java/com/amazon/sample/drm/文件夹中查找并打开LicenseVerificationCallback Java文件,便可以看到应用处理许可证验证的逻辑。下一节提供了更多详细信息。

了解示例应用

示例应用用于演示如何集成DRM。在示例应用中,MainActivity类(app/src/main/java/com/amazon/sample/drm/MainActivity.java)中的onCreate()方法会启动LicensingService类中的verifyLicense()方法。

protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setupApplicationSpecificOnCreate();
    LicensingService.verifyLicense(getApplicationContext(), new LicenseVerificationCallback(this));
}

verifyLicense()方法会传递两个参数:应用程序上下文(getApplicationContext())及LicenseVerificationCallback的实现(new LicenseVerificationCallback(getApplicationContext()))。

您可以在LicenseVerificationCallback.java类中看到LicenseVerificationCallback的实现:

public class LicenseVerificationCallback implements com.amazon.device.drm.LicensingListener {
...
}

LicenseVerificationCallback会调用onLicenseCommandResponse()方法以获取许可证状态:

public class LicenseVerificationCallback implements com.amazon.device.drm.LicensingListener {

       public void onLicenseCommandResponse(final LicenseResponse licenseResponse) {

          final LicenseResponse.RequestStatus status = licenseResponse.getRequestStatus();
          ...
       }
}

在收到亚马逊应用商店对verifyLicense()调用的结果后,Appstore SDK将调用此onLicenseCommandResponse()方法。

在这个简单的实现中,应用只会记录许可证状态,而不会触发任何类型的操作:

public void onLicenseCommandResponse(final LicenseResponse licenseResponse) {
    final LicenseResponse.RequestStatus status = licenseResponse.getRequestStatus();
    switch (status) {
        case LICENSED:
            Log.d(TAG, "LicenseResponse status: " + status);
            break;
        case NOT_LICENSED:
            Log.d(TAG, "LicenseResponse status: " + status);
        case EXPIRED:
            Log.d(TAG, "LicenseResponse status: " + status);
            LicensingPromptHelper.showLicenseFailurePrompt(context, LicenseVerificationPromptContent.DEEP_LINK);
            break;
        case ERROR_VERIFICATION:
            Log.d(TAG, "LicenseResponse status: " + status);
        case ERROR_INVALID_LICENSING_KEYS:
            Log.d(TAG, "LicenseResponse status: " + status);
        case UNKNOWN_ERROR:
            Log.d(TAG, "LicenseResponse status: " + status);
            LicensingPromptHelper.showLicenseFailurePrompt(context, LicenseVerificationPromptContent.SHUT_DOWN);
    }
  }

有关许可证状态的响应将包含下列状态之一:

  • LICENSED
  • NOT_LICENSED
  • EXPIRED
  • ERROR_VERIFICATION
  • ERROR_INVALID_LICENSING_KEYS
  • UNKNOWN_ERROR

在Fire TV上运行应用后,在Logcat中筛选LicenseResponse一词并观察记录下的内容。通过许可证响应,可以检查用户是否有权运行该应用。

有关各个许可证状态的描述,请参阅许可证状态


Last updated: 2023年10月2日