使用Unity的Android项目中的DRM
DRM,也常被称为许可证验证,用于解决开发者对未经授权复制和分发应用的后顾之忧。通过在应用中实现DRM,您就能确保只有购买应用的用户可以在授权的设备上安装该应用。
- 关于DRM和许可证验证
- 哪些类型的应用可以使用DRM
- 许可证检查概述
- Unity项目中的其他DRM设置
- 在亚马逊应用商店中的DRM
- 使用App Tester测试DRM
- Unity Android 项目中的DRM常见问题解答
关于DRM和许可证验证
通过DRM API(已包含在Unity插件中),您可以对应用强制进行许可证验证。用户需要安装并登录到亚马逊应用商店客户端,才能访问包含亚马逊DRM的应用。
例如,假设您的应用在适用于相应Fire平板电脑版本的亚马逊应用商店中售价2.99美元。用户购买应用并在Fire平板电脑中安装后,DRM会为用户进行授权,允许其在Fire平板电脑设备中运行该应用。假设黑客获取了您开发的应用,并试图将它共享给其他尚未购买的人(这些用户缺少必要的内容许可证)。DRM会阻止应用在这些未经授权的设备上运行。
哪些类型的应用可以使用DRM
您可以选择是否(以及如何)实现DRM。DRM的重要性取决于应用的类型:
- 付费应用: 如果您的应用是付费应用,请使用DRM以防止对应用的无偿访问。付费应用是指用户必须付费才能下载的应用。
- 含应用内购买的免费应用: 如果您的应用是包含应用内购买的免费应用,并且您只想保护IAP商品,则无需引入DRM,因为IAP API已经为您的IAP内容提供了保护。例如:假设您有一个免费的体育类应用,其中包含了可供用户购买的按次付费项目(应用内购买)。如果应用中有IAP商品,那么您只需检查亚马逊现有的IAP功能即可,无需检查许可证或其他授权。
- 无应用内购买商品的免费应用: 由于应用本身是免费的,而且下载不受限制,免费应用其实不是很有必要检查用户是否进行了正当“购买”。不过,如果您希望仅限授权用户访问,则仍可实现DRM。
许可证检查概述
通过DRM API可以检查用户是否获得了内容许可证。亚马逊应用商店客户端将在应用的本地缓存中查找相应的内容许可证。如果在本地缓存中找到了许可证,则会在响应中将其返回。(因此,即使用户处于离线状态,应用仍然可以运行。) 如果缓存中没有许可证,亚马逊应用商店客户端将调用Appstore,以检索内容许可证。
您需要使用DRM API启动许可证检查,然后根据亚马逊返回的许可证状态应用逻辑,对用户进行授权或予以拒绝。
Unity项目中的其他DRM设置
要在Unity应用中使用DRM,您必须在创建Android APK之前更新清单并声明IAP和DRM响应接收器。
如果您已经有Android清单,请在application
节点下添加一个新的receiver
。如果您的应用以Android 12或更高版本为目标,则必须在MainActivity
和ResponseReceiver
中显式地将android:exported
设置为true
,如下面的示例所示:
<application>
...
<activity android:label="@string/app_name" android:name="com.amazon.sample.drm.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name = "com.amazon.device.drm.ResponseReceiver" android:exported="true"
android:permission = "com.amazon.drm.Permission.NOTIFY" >
<intent-filter>
<action android:name = "com.amazon.drm.NOTIFY" />
</intent-filter>
</receiver>
...
</application>
如果您没有Android清单,您可以使用Assets/Plugins/Android
中的示例Android清单。
- 将IapSdkCptServiceSampleAndroidManifest.xml重命名为AndroidManifest.xml。
-
在
application
节点下添加以下receiver
。如果您的应用以Android 12或更高版本为目标,则必须如下所示在MainActivity
和ResponseReceiver
中显式地将android:exported设置为true
:<application> ... <activity android:label="@string/app_name" android:name="com.amazon.sample.drm.MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name = "com.amazon.device.drm.ResponseReceiver" android:exported="true" android:permission = "com.amazon.drm.Permission.NOTIFY" > <intent-filter> <action android:name = "com.amazon.drm.NOTIFY" /> </intent-filter> </receiver> ... </application>
- 请更新清单节点的
package
、android:versionName
和android:versionCode
属性。
在亚马逊应用商店中的DRM
以前,将Android APK上传至亚马逊应用商店后,可以为“应用亚马逊DRM?”选择是或否。如果选择是,则亚马逊会为您的应用添加DRM。
使用适用于Unity的Appstore SDK插件,开发者控制台不会再显示此选项。如果想要为APK添加DRM,请使用DRM API(包含在适用于Unity的Appstore SDK插件中)在您的应用中引入许可证检查。
如果尚未升级为适用于Unity的Appstore SDK插件,但使用了较早的IAP SDK插件(或者没有使用IAP),则上传APK后,系统会显示“是否允许亚马逊应用DRM?”选项。
警告消息
如果您上传的APK使用较旧版本的Unity插件,则会看到以下警告。
使用App Tester测试DRM
需要安装Amazon App Tester才能在设备中测试DRM。Amazon App Tester是一款模拟亚马逊应用商店授权的工具(以前仅由IAP使用)。要测试应用中的DRM功能,就必须使用Amazon App Tester。
在Beta测试期间,您需要下载并安装Amazon App Tester的Beta测试版。请联系您的亚马逊业务合作伙伴了解详情。
Amazon App Tester的Beta测试版提供了名为“DRM API Response Settings”(DRM API响应设置)的选项卡,使您能够模拟不同许可证状态的响应。
在Fire设备上安装Amazon App Tester
开发包含DRM或IAP(两者均需要与亚马逊应用商店进行通信)的应用时,可以使用名为Amazon App Tester的APK对应用进行测试。Amazon App Tester应用会模拟亚马逊应用商店客户端。要设置Amazon App Tester,请执行以下操作:
- 如果您已经安装了Amazon App Tester的生产版本,请先将其卸载。(请注意,此应用不同于网页应用测试器。)
- 在终端或命令提示符中,浏览至Amazon App Tester APK的Beta测试版的下载目录。
-
使用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 Response Settings选项,则表示您使用的Amazon App Tester并非Beta测试版本。您很可能在与应用商店中当前的生产版本进行交互。
-
为应用选择所需的许可证状态。如果将其保留为Default(默认),则将使用LICENSED(已获许可)状态。
进入沙盒模式
沙盒模式会对通常发送到亚马逊应用商店客户端的调用加以限制,转而将其路由至Amazon App Tester。此模式仅可用于本地测试。
-
在您通过ADB与Fire设备进行连接的同一终端中,进入沙盒模式:
adb shell setprop debug.amazon.sandboxmode debug
(请注意,如果需要退出沙盒模式,请运行:
adb shell setprop debug.amazon.sandboxmode none
。)每次通过ADB重新连接到Fire设备时,都需要重新启动沙盒模式。
测试许可证验证
要使用Amazon App Tester测试应用的许可证验证,请执行以下操作:
-
通过ADB将计算机连接至Fire TV或Fire平板电脑。有关详细信息,请参阅以下任一内容:
-
使用以下命令将应用设置为沙盒模式:
adb shell setprop debug.amazon.sandboxmode debug
沙盒模式会对通常发送到亚马逊应用商店客户端的调用加以限制,转而将其路由至Amazon App Tester。此模式仅可用于本地测试。
-
卸载Amazon App Tester的生产版本,然后在您的Fire设备上下载并打开Amazon App Tester的Beta测试版。
-
打开Amazon App Tester,然后转至Appstore SDK API > DRM API Response Settings(DRM API响应设置)> GetLicense API。您会看到几个可以设置的许可证选项:
-
运行包含DRM的Fire TV或平板电脑应用。Amazon App Tester会根据您在Amazon App Tester中的选择,模拟有关用户许可证状态的响应。
要退出沙盒模式,请运行以下命令:
adb shell setprop debug.amazon.sandboxmode none
有关App Tester使用方法的更多详情,请参阅App Tester文档。
Unity Android 项目中的DRM常见问题解答
- 如果我通过亚马逊销售应用,我是否必须使用DRM?
- 不是,这不是必须的。
- 客户是否需要接入互联网才能使用支持亚马逊DRM的应用程序?
- 不需要。安装应用后,用户不接入互联网也可以使用应用,但他们仍需定期连接到互联网。
- 在不接入互联网的情况下,如何验证用户是否有权访问应用?
- 在应用的安装过程中,亚马逊应用商店客户端会下载一个小型令牌,该令牌可以授予用户应用访问权限。有效令牌允许购买了应用的用户在离线状态下访问应用。亚马逊应用商店客户端会定期与亚马逊服务器进行通信以刷新令牌。
Last updated: 2024年12月4日