DRM (digital rights management, or more generally license verification), is used to address developer concerns around unauthorized copying and distribution of your app. When you implement DRM in your app, you ensure that only users who purchased your app can install it on the authorized device.
Tip: The DRM APIs are included in the Appstore SDK. For instructions on how to add the Appstore SDK library into a new project, see Integrate the Appstore SDK
The DRM API allows you to check whether the user is licensed for the content. The Appstore client looks for an appropriate content license in the app's local cache. If the license is found in the local cache, it will be returned in the response. (Hence even if a user is offline, the app will still run.) If the license does not exist in the cache, the Appstore client will call the Appstore to retrieve the content license.
You will need to use the DRM API to initiate the license checking and then apply logic to authorize or deny the user based on the status of the license returned by Amazon.
DRM in Appstore SDK
Previously, when you uploaded Android APKs into the Amazon Appstore, you had the option to select Yes or No for "Apply Amazon DRM?". If you selected Yes, Amazon would add DRM to your app.
With the Appstore SDK, the Developer Console no longer displays this option. If you want to add DRM to your APK, use the DRM API (included in the Appstore SDK) to incorporate license checking in your app.
If you haven't upgraded to the Appstore SDK, but use an older IAP SDK (or aren't using IAP), the option to "Allow Amazon to Apply DRM?" appears after uploading your APK.
Warning messages
If you upload an APK that uses an older IAP SDK version or no SDK at all, then you see the following warning.
Follow the instructions in Integrate the Appstore SDK to add the Appstore SDK into your Android project.
Update your app's manifest file.
Add an entry for the ResponseReceiver to your manifest. The following code example shows how to add a ResponseReceiver to the AndroidManifest.xml file for DRM. If your app targets Android 12 or higher, you must explicitly set android:exported to true in the MainActivity and ResponseReceiver as shown in the following example:
If your app targets Android API level 30 or higher, you must define the list of packages your app needs to query in the AndroidManifest.xml file. To be able to query Amazon App Tester and Amazon Appstore, add the following code to your manifest file.
Tip: The LicensingService class provides the method getAppstoreSDKMode() to determine if the app is in SANDBOX mode or PRODUCTION mode. This can be helpful when testing your app using the Amazon App Tester which requires your app be in sandbox mode. The getAppstoreSDKMode() method returns UNKNOWN if verifyLicense() isn't called first.
Implement LicensingListener.
LicensingListener defines a single method: onLicenseCommandResponse(final LicenseResponse licenseResponse). This method is called by the Appstore SDK after it receives the result of the verifyLicense() call from Amazon Appstore. LicenseResponse will contain the status of verifyLicense() call. The response will contain one of the following statuses:
LICENSED
NOT_LICENSED
ERROR_VERIFICATION
ERROR_INVALID_LICENSING_KEYS
EXPIRED
UNKNOWN_ERROR
For descriptions about each status and the reasons, see License statuses.
A basic implementation of LicensingListener interface is as follows. (This code merely logs the returned status of the license.)
The public key you added does not match the corresponding private key that is with Amazon.
EXPIRED
The user's license has expired and the user's current license is now not valid. A license is valid for 60 days. After 30 days, the Appstore tries to renew the license every 24 hours.
If the user is offline for more than 60 days, the Appstore will be unable to renew the license before it expires. If the license expires, the app will no longer launch for the customer.
Other reasons for expired licenses might be due to the following:
The customer might have requested cancellation of his or her order.
The Appstore fulfilled the customer's order optimistically (before the payment transaction was finalized), but later the charge failed so the license was revoked.
UNKNOWN_ERROR
This status indicates an internal error at Amazon's end.
DRM library obfuscation
Most of the Appstore SDK library is already obfuscated (before it was packaged into a JAR). However, some developer-facing classes are not obfuscated. The following DRM library classes are not obfuscated:
LicensingListener
LicensingService
LicenseResponse
RequestId
If you want to keep these classes from being obfuscated, add the appropriate references in your ProGuard file to exclude them (assuming you're using ProGuard to obfuscate your code).
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.