開発者コンソール

Unityを使用したAndroidプロジェクトにおけるDRM

Unityを使用したAndroidプロジェクトにおけるDRM

DRM(より一般的には、ライセンス検証)は、アプリの不正なコピーや配布に関する開発者の懸念に対処することを目的としています。アプリにDRMを実装する場合、アプリを購入したユーザーのみが認証済みデバイスにアプリをインストールできるようにします。

DRMとライセンス検証について

Unity用プラグインに既に含まれているDRM APIを使用すると、アプリのライセンス検証を適用できます。Amazon DRMが組み込まれているアプリの場合、ユーザーがアクセスするには、Amazonアプリストアクライアントをインストールし、ログインしておく必要があります。

たとえば、AmazonアプリストアでFireタブレット対応アプリを$2.99で販売しているとします。ユーザーがそのアプリを購入してFireタブレットにインストールすると、ユーザーがFireタブレットデバイスでアプリを実行することがDRMによって許可されます。一方、ハッカーがアプリを入手し、アプリを購入していない別のユーザー(必要なコンテンツライセンスを持っていないユーザー)と共有しようとすると、許可されていないデバイス上でのアプリの実行がDRMによって防止されます。

DRMを使用できるアプリの種類

DRMを実装するかしないか、またどのように実装するかは自由に選択できます。DRMの重要性は、アプリの種類によって異なります。

  • 有料アプリ: 有料アプリの場合、DRMを組み込むことで、非購入者による不正なアクセスを防止できます。有料アプリとは、ユーザーがダウンロードするために料金を支払う必要があるアプリを指します。
  • アプリ内課金がある無料アプリ: アプリ内課金を組み込んだ無料アプリで、IAPアイテムのみを保護したい場合、IAP APIでIAPコンテンツが既に保護されているため、DRMを組み込む必要はありません。ユーザーがアプリ内で購入できる有料視聴番組(アプリ内課金)を提供する無料のスポーツアプリを例にとると、アプリにIAPアイテムがある場合は、Amazonの既存のIAP機能以外のライセンスやその他の認証を確認する必要はありません。
  • アプリ内課金アイテムがない無料アプリ: 無料アプリでは、アプリがそもそも無料であり、ダウンロードに制限がないため、ユーザーが合法的にアプリを「購入」したかどうかを確認する必要がありません。ただし、アクセスを権限のあるユーザーのみに制限する場合は、DRMを実装できます。

ライセンスチェックについて

DRM APIを使用すると、ユーザーにコンテンツのライセンスが付与されているかどうかを確認できます。Amazonアプリストアクライアントは、アプリのローカルキャッシュで適切なコンテンツライセンスを探します。ライセンスがローカルキャッシュで見つかると、それがレスポンスで返されます(したがって、ユーザーがオフラインでもアプリは実行されます)。 ライセンスがキャッシュに存在しない場合、AmazonアプリストアクライアントはAmazonアプリストアを呼び出してコンテンツライセンスを取得します。

DRM APIを使用してライセンスチェックを開始し、Amazonが返すライセンスのステータスに基づいてユーザーを承認または拒否するロジックを適用する必要があります。

UnityプロジェクトにおけるDRMの追加セットアップ

UnityアプリでDRMを使用するには、Android APKを作成する前にマニフェストを更新し、IAPとDRMの両方のResponseReceiverを宣言する必要があります。

Androidマニフェストが既にある場合は、次のようにapplicationノードに新しいreceiverを追加します。アプリがAndroid 12以降を対象としている場合は、次の例に示すように、MainActivityResponseReceiverandroid: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マニフェストを使用できます。

  1. IapSdkCptServiceSampleAndroidManifest.xmlの名前をAndroidManifest.xmlに変更します。
  2. applicationノードの下に次のreceiverを追加します。アプリがAndroid 12以降を対象としている場合は、以下のように、MainActivityResponseReceiverandroid: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>
    
  3. manifestノードのpackageandroid:versionNameandroid:versionCodeの各属性を更新します。

AmazonアプリストアにおけるDRM

以前は、Android APKをAmazonアプリストアにアップロードする際、[Amazon DRMを適用しますか?][はい] または [いいえ] を選択できるオプションが用意されていました。ここで [はい] を選択すると、アプリにDRMが追加されていました。

Unity用Appstore SDKプラグインを使用すると、このオプションは開発者コンソールに表示されません。APKにDRMを追加する場合は、DRM API(Unity用Appstore SDKプラグインの一部として提供)を使用して、ライセンスチェック機能をアプリに組み込みます。

Unity用Appstore SDKプラグインにアップグレードしておらず、以前のIAP SDKプラグインを使用している(またはIAPを使用していない)場合は、APKをアップロードすると、[<APK名>へのDRMの適用をAmazonに許可しますか?] というオプションが表示されます。

警告メッセージ

旧バージョンのUnity用プラグインを使用しているAPKをアップロードした場合は、次の警告が表示されます。

アプリファイルがDRM統合を含まない古いバージョンのSDKを使用しています。上記のDRM設定を選択してください。コードにDRMサポートを追加したい場合は、Appstore SDKを使用してください。

App TesterによるDRMのテスト

デバイスでDRMをテストするには、Amazon App Testerをインストールする必要があります。Amazon App Testerは、Amazonアプリストアでの認証をシミュレートするためのツールです(以前はIAPでのみ使用されていました)。アプリのDRM機能をテストするには、Amazon App Testerが必要です。

ベータ期間中は、Amazon App Testerのベータ版をダウンロードしてインストールする必要があります。詳細については、Amazonのビジネスパートナーにお問い合わせください。

Amazon App Testerのベータ版には [DRM API Response Settings] というタブがあり、さまざまなライセンスステータスのレスポンスをシミュレートできます。

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ではありません。Amazonアプリストアで提供されている製品版を操作している可能性があります。

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

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

サンドボックスモードへの切り替え

サンドボックスモードでは、通常であればAmazonアプリストアクライアントに向かう呼び出しを、強制的にAmazon App Testerアプリへとルーティングします。このモードは、ローカルでのテストにのみ使用します。

  1. ADBを使用してFireデバイスに接続したのと同じターミナルで、サンドボックスモードを開始します。

    adb shell setprop debug.amazon.sandboxmode debug
    

    サンドボックスモードを終了する必要がある場合は、adb shell setprop debug.amazon.sandboxmode noneを実行してください。

    ADBを使用してFireデバイスに再接続するたびに、サンドボックスモードを新たに開始する必要があります。

ライセンス検証のテスト

Amazon App Testerを使用してアプリのライセンス検証をテストするには、次の手順を実行します。

  1. ADBを使用して、コンピューターをFire TVまたはFireタブレットに接続します。詳細については、次のどちらかを参照してください。

  2. 次のコマンドを使用して、アプリをサンドボックスモードに設定します。

    adb shell setprop debug.amazon.sandboxmode debug
    

    サンドボックスモードでは、通常であればAmazonアプリストアクライアントに向かう呼び出しを、強制的にAmazon App Testerアプリへとルーティングします。このモードは、ローカルでのテストにのみ使用します。

  3. 製品版のAmazon App Testerをアンインストールしてから、ベータ版のAmazon App TesterをFireデバイスにダウンロードして開きます。

  4. Amazon App Testerを開いて、[Appstore SDK APIs] > [DRM API Response Settings] > [GetLicense API] の順に選択します。設定可能なライセンスオプションがいくつか表示されます。

    DRM API Response Settings
    App Testerの [DRM API Response Settings]
  5. DRMを含むFire TVアプリまたはFireタブレットアプリを実行します。Amazon App Testerでは、選択した内容に基づいて、ユーザーのライセンスステータスに関するレスポンスがシミュレートされます。

    サンドボックスモードを終了するには、以下を実行します。

    adb shell setprop debug.amazon.sandboxmode none
    

App Testerの使用方法の詳細については、App Testerユーザーガイドを参照してください。

Unity AndroidプロジェクトにおけるDRMに関するよくある質問(FAQ)

Amazon.co.jpでアプリを販売する場合、DRMを使用する必要がありますか?
いいえ、必須ではありません。
Amazon DRM対応アプリを使用するには、ユーザーがインターネットにアクセスする必要がありますか?
いいえ、アプリをインストールした後、ユーザーはインターネットにアクセスせずにアプリを使用できます。ただし、定期的にインターネットに接続する必要があります。
インターネットにアクセスしていないユーザーにアプリの使用権限があることを検証するには、どうすればよいですか?
アプリのインストールプロセス中に、Amazonアプリストアクライアントはユーザーにアプリへのアクセス権を付与するトークンをダウンロードします。トークンが有効な場合、アプリを購入したユーザーはオフラインでアプリにアクセスできます。Amazonアプリストアクライアントは、定期的にAmazonサーバーと通信してトークンを更新します。

Last updated: 2024年12月4日