開発者コンソール

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] を選択します。
  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] の順にクリックして、プロジェクトをビルドします。

    Android Studioによってプロジェクトがビルドされるまでに数分かかる場合があります。必要なアセットをGradleが取得して、プロジェクトをビルドするためです。特定のファイルやライブラリがAndroid Studioで必要になった場合は、それらをダウンロードするように求められます。必要なアセットをインストールすると、Android Studioによってプロジェクトが再ビルドされます。

手順3: プロジェクトのアセットにPEMファイルを追加する

PEMファイルをサンプルアプリに追加するには、次の手順に従います。

  1. 開発者アカウントで開発者コンソールにログインします。
  2. 既にアプリがある場合は、[アプリ&サービス] > [マイアプリ] に移動します。次に、アプリをクリックします。まだアプリを公開していない場合は、Amazonアプリストアにアプリを申請する方法を参照してください。
  3. アプリの新しいバージョンを作成します。アプリ名の下にある [次期バージョン] をクリックします。

  4. [アプリファイルをアップロード] 画面に移動します。
  5. [関連情報] セクションで、[パブリックキーを表示] をクリックします。
  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" />

Fire TVをサポートするには、touchscreenプロパティをfalseに設定します。こうしないと、Fire TVデバイスでアプリがサポートされません。

手順5: FireデバイスにAmazon App Testerをインストールする

DRMまたはIAP(どちらもAmazonアプリストアとの通信が必要)を実装したアプリを開発する場合、アプリのテストは、Amazon App TesterというAPKを使用して行います。Amazon App Testerアプリでは、Amazonアプリストアクライアントがシミュレートされます。Amazon App Testerをセットアップするには、次の手順に従います。

  1. 既に以前のバージョンのAmazon App Testerがインストールされている場合は、最初にアンインストールします。このアプリはWeb App Testerとは異なるので注意してください。
  2. ターミナルまたはコマンドプロンプトで、Amazon App Tester APKをダウンロードしたディレクトリに移動します。
  3. ADBを使用してFireデバイスにAPKをインストールします。

    adb install -r amazon-app-tester.apk
    

    -rパラメーターを指定すると、既にApp Testerがインストールされている場合にAPKが再インストールされます。

  4. FireデバイスでAmazon App Testerアプリを開きます。インストールされているアプリを探すには、次の手順に従います。

    • Fireタブレット[ゲームとアプリ] メニューをクリックし、[ライブラリ] をクリックします。[Amazon App Tester] の横にある [開く] をクリックします。アプリが表示されない場合は、[アップデート] タブも確認してください。
    • Fire TV[設定] に移動し、[アプリケーション] をクリックします。[インストール済みアプリケーションを管理] をクリックします。[Amazon App Tester] をクリックし、[アプリを起動] を選択します。
  5. [Appstore SDK API's] バナーをクリックします。
  6. [DRM API Response Settings] をクリックします。

    この [DRM API Response Settings] オプションが表示されない場合、使用しているAmazon App Testerのバージョンが最新ではありません。

  7. アプリに必要なライセンスステータスを選択します。[Default] のままにしておくと、LICENSEDステータスが使用されます。

    DRM API Response Settings
    App Testerの [DRM API Response Settings]

手順6: サンドボックスモードにする

サンドボックスモードでは、通常であればAmazonアプリストアクライアントに向かう呼び出しを、強制的に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] ボタンアプリを実行をクリックして、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()メソッドは2つのパラメーターを取ります。アプリのコンテキスト(getApplicationContext())とLicenseVerificationCallbackの実装(new LicenseVerificationCallback(getApplicationContext()))です。

LicenseVerificationCallbackの実装は、LicenseVerificationCallback.javaクラスで確認できます。

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();
          ...
       }
}

このonLicenseCommandResponse()メソッドは、AmazonアプリストアからverifyLicense()呼び出しの結果を受け取った後、Appstore SDKによって呼び出されます。

この簡易な実装では、アプリは何のアクションもトリガーせずに、ライセンスステータスの記録のみを行います。

public void onLicenseCommandResponse(final LicenseResponse licenseResponse) {
    final LicenseResponse.RequestStatus status = licenseResponse.getRequestStatus();
    switch (status) {
        case LICENSED:
            Log.d(TAG, "LicenseResponseステータス:" + status);
            break;
        case NOT_LICENSED:
            Log.d(TAG, "LicenseResponseステータス:" + status);
        case EXPIRED:
            Log.d(TAG, "LicenseResponseステータス:" + status);
            LicensingPromptHelper.showLicenseFailurePrompt(context, LicenseVerificationPromptContent.DEEP_LINK);
            break;
        case ERROR_VERIFICATION:
            Log.d(TAG, "LicenseResponseステータス:" + status);
        case ERROR_INVALID_LICENSING_KEYS:
            Log.d(TAG, "LicenseResponseステータス:" + status);
        case UNKNOWN_ERROR:
            Log.d(TAG, "LicenseResponseステータス:" + 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日