DRM示例应用
通过这个示例应用,您将了解如何使用DRM概述中所述的代码,在应用中引入DRM许可证检查。浏览示例应用有助于您了解如何结合环境情况来引入DRM。示例应用可以在Fire TV或Fire平板电脑上运行。
- 步骤1: 使用必要的资产
- 步骤2: 在示例应用中添加Appstore SDK JAR
- 步骤3: 在项目的资产中添加PEM文件
- 步骤4: 通过ADB连接到Fire设备
- 步骤5: 在Fire设备上安装Amazon App Tester
- 步骤6: 进入沙盒模式
- 步骤7: 运行应用
- 了解示例应用
步骤1: 使用必要的资产
首先,收集项目所必需的所有资产。下载并解压缩以下内容:
您还需要AppstoreAuthenticationKey.pem
文件,该文件可以在教程的步骤3中下载。
此外,您还需要使用:
- Android Studio
- Fire TV或Fire平板电脑设备
步骤2: 在示例应用中添加Appstore SDK JAR
Appstore SDK JAR不会自动打包到您要创建的DRM示例应用中。(否则,每次Appstore SDK发布新版本后,示例应用便会过期)。要将SDK JAR添加到示例应用中,请执行以下操作:
- 打开Android Studio,然后选择Open an existing Android Studio project(打开现有Android Studio项目)。
- 浏览至SampleDRMApplication文件夹并将其选中。然后单击Open(打开)。
-
更改为Project(项目)视图。
注意: 本教程中,所有说明都假定您处于Android的“Project”视图中。 - 复制amazon-appstore-sdk-[x].jar文件。
- 在Android Studio项目中,展开app并选择libs。将amazon-appstore-sdk-[x].jar文件粘贴到此目录中。
-
展开app文件夹并打开build.gradle文件。在添加的amazon-appstore-sdk-[x].jar文件上自定义依赖项。例如,如果Appstore SDK版本为3.0.3,代码将如下所示:
dependencies { implementation files('libs/amazon-appstore-sdk-3.0.3.jar') }
-
转到Build(构建)> Rebuild Project(重建项目)以构建项目。
Gradle会获取所需资产并构建项目,因此,Android Studio可能需要几分钟时间来构建项目。如果Android Studio需要特定的文件或库,系统会提示下载。安装完所需资产后,Android Studio将重建项目。
步骤3: 在项目的资产中添加PEM文件
要将PEM文件添加到示例应用中,请执行以下操作:
- 使用开发者账户登录开发者控制台。
- 如果您已有应用,请转到应用与服务 > 我的应用程序。然后单击您的应用。如果您还没有应用,请参阅将应用提交到亚马逊应用商店。
-
创建应用的新版本。在应用名称下方,单击即将推出的版本。
重要须知: 只有在您创建新版本或创建新应用时,才会显示公有密钥的链接。如果在Appstore SDK发布之前,您有一个新版本正在处理中,则必须完成现有版本,然后再创建一个新版本,才会显示公有密钥链接。您也可以为此教程创建一个新的Android应用。 - 转到上传您的应用文件屏幕。
- 在Additional information(其他信息)部分,单击View public key(查看公有密钥)。
-
在显示的“公有密钥”对话框中,单击AppstoreAuthenticationKey.pem链接,下载PEM文件。该文件包含您的公有密钥。
- 复制AppstoreAuthenticationKey.pem文件,将其粘贴到Android Studio项目的app/src/main/assets文件夹中。
步骤4: 通过ADB连接到Fire设备
通过ADB将计算机连接至Fire TV或Fire平板电脑。(示例应用会在Fire TV或 Fire平板电脑上运行。) 有关详细信息,请参阅以下任一内容:
adb version
进行检查。如果无法识别ADB,请参阅步骤C. 将Android调试桥添加到您的路径。在示例应用中,请注意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,请执行以下操作:
- 如果您已经安装了Amazon App Tester的先前版本,请先将其卸载。(请注意,此应用不同于网页应用测试器。)
- 在终端或命令提示符中,浏览至Amazon App Tester APK的下载目录。
-
使用ADB在Fire设备上安装该APK:
adb install -r amazon-app-tester.apk
在已安装App Tester的情况下,
-r
参数将重新安装该APK。 -
在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(启动应用)。
- 单击Appstore SDK API的横幅。
-
单击DRM API Response Settings(DRM API响应设置)。
如果没有看到DRM API Response Settings选项,则表示您使用的Amazon App Tester并非最新版本。
-
为应用选择所需的许可证状态。如果将其保留为Default(默认),则将使用LICENSED(已获许可)状态。
步骤6: 进入沙盒模式
沙盒模式会对通常发送到亚马逊应用商店客户端的调用加以限制,转而将其路由至Amazon App Tester。此模式仅可用于本地测试。
-
在您通过ADB与Fire设备进行连接的同一终端中,进入沙盒模式:
adb shell setprop debug.amazon.sandboxmode debug
(请注意,如果需要退出沙盒模式,请运行:
adb shell setprop debug.amazon.sandboxmode none
。)每次通过ADB重新连接到Fire设备时,都需要重新启动沙盒模式。
步骤7: 运行应用
- 在Android Studio中,单击Logcat选项卡并按
LicenseResponse
筛选。 -
单击Run App(运行应用)按钮 ,在Fire设备上运行应用。
示例应用仅有一个用于显示许可证状态的基本屏幕。
LICENSED
许可证状态如下所示:NOT_LICENSED
响应如下所示: -
您还可以观察控制台中记录的许可证状态消息。
如果您在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日