手順5: アプリに署名してセキュリティプロファイルを構成する


手順5: アプリに署名してセキュリティプロファイルを構成する

本稼働アプリの場合、Amazon側でAmazonアカウントにひも付いたAPK署名を処理します。ただし、ビデオスキルを組み込んだアプリをテストするには、APKに署名し、その署名をAmazonセキュリティプロファイルに関連付ける必要があります。

Fire TV対応サンプルアプリに関する注意点

Fire TV対応サンプルアプリを使用する場合でも、このトピックで説明する手順はすべて行う必要があります。

開発中のアプリの署名について

アプリの署名とはハッシュ値のことであり、どのAndroidアプリでも、ビルド時にこのハッシュ値が適用されます。開発中のアプリをAndroid Studioから実行する場合、デフォルトでは、Androidがデバッグ鍵を使用して自動でアプリの署名を行います(Androidドキュメントのデバッグビルドに署名するを参照)。

しかし、ビデオスキルを含むプロジェクトの場合は、Fire TVがAndroid Studioから提供されるデフォルトのデバッグ鍵を受け入れないため、アプリが機能しないことがあります。ビデオスキルを含むアプリを開発するときは、ローカルでの開発でも、自分でAPKに署名を行い、署名のMD5値とSHA256値を特定のAmazonセキュリティプロファイルに関連付ける必要があります。その関連付けられたセキュリティプロファイルから提供されるAPIキーをアプリに組み込むことで、Amazon Device Messagingからの通信を承認できます。

簡単に言うと、Android Studioのデフォルトのデバッグ署名鍵を使用してFire TV対応アプリを実行しても、そのアプリは正常に機能しません。開発時にFire TV対応アプリが承認されるように正しく署名をするには、ここで説明する手順を行う必要があります。

実稼働用のアプリについては、Amazonアプリストアを使用してアプリに署名すると(デフォルト)、APIキーが自動的に提供されます。ただし、自分で作成した証明書を使用してリリースバージョンのアプリに署名する場合は、そのリリースバージョン用のAPIキーを自分で新たに作成する必要があります。

手順A: アプリの署名に使用する鍵を作成する

最初の手順として、アプリの署名に使用する鍵を作成します。鍵は、キーストアに格納されます。一般的なAndroidアプリには、デバッグ用のキーストアとリリース用のキーストアがあります。署名に使用する鍵を作成するには、次の手順を行います。

  1. アプリの署名に使用するカスタムデバッグ鍵(デフォルトのAndroidデバッグ鍵ではない鍵)を既に持っている場合は、その鍵のキーストアの場所、キーストアのパスワード、鍵のエイリアス、鍵のパスワードを確認してください。確認できたら、次のセクション(手順B: 鍵を使用してアプリに自動的に署名する)に進みます。
  2. カスタムデバッグ鍵を持っていない場合は、Android Studioの上部のメニューの [Build] をクリックし、[Generate Signed Bundle / APK] をクリックします。
  3. [Generate Signed Bundle or APK] ダイアログボックスで、[APK] を選択します。[Next] をクリックします。
  4. [Create new] をクリックし、新しい鍵の各フィールドを入力します。詳細については、Androidドキュメントの鍵とキーストアを生成するを参照してください。キーストアの場所、キーストアのパスワード、鍵のエイリアス、鍵のパスワードをメモしておきます。この情報は次のセクションで必要になります。入力が完了したら、[Apply] をクリックします。

    アプリの署名に使用する鍵を選択する
    アプリの署名に使用する鍵を選択する
  5. ダイアログボックスを閉じます(APKは生成しません)。次の手順に進みます。

詳細については、Androidドキュメントの鍵とキーストアを生成するを参照してください。

手順B: 鍵を使用してアプリに自動的に署名する

前の手順では、アプリの署名に使用するカスタム鍵を作成しました。この手順では、作成した鍵を使用してAPKが自動的に署名されるようにプロジェクトを更新します。特定の鍵を使用してアプリが自動的に署名されるようにするには、次の手順を行います。

  1. Android StudioでFire TV対応アプリのプロジェクトを開きます。
  2. [Build] から [Edit Build Types] をクリックします。次に、左側の [Modules] をクリックします。
  3. 上部の [Signing Configs] タブをクリックします。
  4. メインペインでプラス記号 [+] をクリックして新しい署名構成プロファイルを作成し、構成の名前(「video_skill」など)を入力します。
  5. [Store File][Store Password][Key Alias][Key Password] を選択して新しい署名構成プロファイルを設定します。前の手順(手順A: アプリの署名に使用する鍵を作成する)でメモした情報を設定してください。

    新しい署名構成プロファイルを作成する
    新しい署名構成プロファイルを作成する
  6. [Apply] をクリックします。
  7. [Default Config] タブをクリックします。
  8. [Signing Config] ドロップダウンメニューで、署名構成プロファイル(「$signingConfigs.video_skill」など)を選択します。
  9. [OK] をクリックしてダイアログボックスを閉じます。
  10. 左のペインでGradle Scriptsを展開し、build.gradle (Module: app)ファイルをダブルクリックします。signingConfigsというオブジェクトに、作成した署名構成プロファイルの内容が表示されていることを確認します。以下に例を示します。

     android {
       signingConfigs {
          video_skill {
              storeFile file('/Users/yourusername/android_signature/androidkeys.jks')
              storePassword 'yourstorepassword'
              keyAlias = 'myandroidkey'
              keyPassword 'yourkeypassword'
          }
        ...
       }
     }
    

    さらに、デフォルトにする署名構成プロファイルを選択したため、defaultConfigオブジェクトにその名前が表示されます。

     defaultConfig {
       ...
        signingConfig signingConfigs.video_skill
     }
    

    これで、Android Studioからアプリを実行すると、指定した鍵がアプリの署名に使用されます。アプリの署名の詳細については、Androidドキュメントでアプリに自動で署名するようビルドプロセスを設定するを参照してください。

    ここで覚えておくべき原則は、Fire TV対応アプリを開発して実行する場合、アプリの署名には、Android Studioのデフォルトのデバッグ鍵ではなく、Amazonセキュリティプロファイルに関連付けられた鍵を使用する必要があるということです。この原則が守られるのであれば、アプリに署名するプロセスが上記の手順と異なっても構いません。

手順C: 鍵からMD5値とSHA-256値を取得する

AmazonセキュリティプロファイルからAPIキーを生成する(次の手順で説明します)には、署名鍵からMD5値とSHA-256値を取得しておく必要があります。MD5値とSHA-256値の抽出には、keytoolユーティリティ(Javaの一部である、鍵と証明書の管理ツール)を使用できます。

署名鍵からMD5値とSHA256値を抽出するには、次の手順を行います。

  1. 次のコマンドをテキストファイルにコピーします。

    keytool -list -alias myandroidkey -keystore /Users/johndoe/androidkeys.jks -storepass mykeystorepassword -keypass mykeypassword -v
    
  2. 次のように、各パラメーターを編集します。

    • myandroidkeyには、アプリの署名に使用する鍵のエイリアスを指定します。
    • /Users/johndoe/androidkeys.jksには、キーストアへのパスを指定します。
    • mykeystorepasswordには、キーストアのパスワードを指定します。
    • mykeypasswordには、鍵のパスワードを指定します。

    これらの値は、自身で設定している鍵の情報に合わせて指定してください。

  3. 編集したkeytoolコマンドをターミナルまたはコマンドラインに貼り付け、Enterキーを押します。

    レスポンスとして、次のような「証明書フィンガープリント」が(そのほかの情報と共に)表示されます。

    Certificate fingerprints:
    	 MD5:  02:6C:8B:83:77:96:39:C8:E8:C6:45:AC:6A:CE:B2:5B
    	 SHA1: 45:40:AD:E1:0B:B2:AE:CC:CB:21:65:BD:5A:01:82:A8:07:29:73:D7
    	 SHA256: 12:8F:C1:5D:3D:E9:BD:00:E0:ED:77:B3:84:71:AB:8F:6E:7D:C0:9E:E5:FE:64:EF:8F:BD:DA:EF:77:1F:E8:5E
    ...
    

    必要なのは、MD5値とSHA256値だけです。このMD5値とSHA256値を、アクセスしやすい場所にコピーしておきます。これらの値は、セキュリティプロファイルの作成(次の手順で説明します)に必要になります。

手順D: セキュリティプロファイルを作成する

セキュリティプロファイルは、セキュリティ認証情報をアプリに関連付けることができます。セキュリティプロファイルを作成するには、次の手順を行います。

  1. https://developer.amazon.comにログインし、[開発者コンソール] をクリックします。Amazonアプリストアの開発者コンソールが開きます(Alexaの開発者コンソールではありません)。
  2. [設定] をクリックし、1段下のメニューから [セキュリティプロファイル] をクリックします。
  3. [セキュリティプロファイルを新規作成] をクリックします。
  4. [セキュリティプロファイル名] フィールドに、わかりやすい名前を指定します。たとえば、アプリと同じ名前にすることができます。[セキュリティプロファイルの説明] フィールドには、必要な説明を入力します。

    セキュリティプロファイルの名前を指定する
    セキュリティプロファイルの名前を指定する
  5. [保存] をクリックします。
  6. [Android/Kindleの設定] タブをクリックします。

    セキュリティプロファイルを構成する
    セキュリティプロファイルを構成する
  7. 次のフィールドを入力します。

    フィールド 説明
    APIキー名 これは、アプリの正式名称である必要はありません。この名前は、セキュリティプロファイルに登録されている複数のアプリやウェブサイトから、特定のAndroidアプリを識別するために使用されます。
    パッケージ これは、Androidプロジェクトのパッケージ名と一致する必要があります。Android Studioで、appフォルダを展開し、manifestsを展開してAndroidManifest.XMLをダブルクリックします。上部にpackage名が見つかるはずです。たとえば、com.acme.sample.hawaiiappのような名前です。
    MD5署名 この署名は、アプリを検証するために使用されます。MD5署名の形式は、16進数を2桁ずつコロンで区切り、全部で16個の数字を並べた形でなければなりません。以下に例を示します。 02:6C:8B:83:77:96:39:C8:E8:C6:45:AC:6A:CE:B2:5B

    この値は、前のセクション(手順C: 鍵からMD5値とSHA-256値を取得する)でkeytoolを使用して署名鍵から抽出したものです。
    SHA256署名 この署名は、アプリを検証するために使用されます。SHA-256署名の形式は、16進数を2桁ずつコロンで区切り、全部で32個の数字を並べた形でなければなりません。以下に例を示します。 12:8F:C1:5D:3D:E9:BD:00:E0:ED:77:B3:84:71:AB:8F:6E :7D:C0:9E:E5:FE:64:EF:8F:BD:DA:EF:77:1F:E8:5E

    この値は、前のセクション(手順C: 鍵からMD5値とSHA-256値を取得する)でkeytoolを使用して署名鍵から抽出したものです。
  8. [新しいキーを生成] をクリックします。
  9. [APIキー] 列の [表示] をクリックし、APIキーをコピーします。このAPIキーはFire TVプロジェクトに追加する必要があるため、アクセスしやすい場所に保存しておいてください。

    APIキーの詳細
    APIキーの詳細
  10. [API Key Details] ウィンドウを閉じます。次に、[ウェブ設定] タブをクリックします。
  11. クライアントIDとクライアントシークレットを、アクセスしやすい場所にコピーします。クライアントIDとクライアントシークレットは、手順6: Lambdaパッケージを作成・デプロイするでLambdaコードを仕上げるときに使用します。

    クライアントIDとクライアントシークレットをコピーする
    クライアントIDとクライアントシークレットをコピーする

手順E: セキュリティプロファイルのLogin with Amazonを有効にする

セキュリティプロファイルのLogin with Amazonを有効にする必要があります。

  1. 開発者コンソールで、上部のメニューから [Login with Amazon] をクリックします。
  2. Login with Amazonコンソールの [セキュリティプロファイルを選択] ドロップダウンメニューで、使用するセキュリティプロファイルを選択します。

    セキュリティプロファイルのLogin with Amazonを有効にする
    セキュリティプロファイルのLogin with Amazonを有効にする
  3. [確認する] ボタンをクリックします。
  4. [同意の画面の情報を入力] ダイアログボックスで、使用するプライバシーURLと同意のロゴ画像を追加し、[保存] をクリックします(テストするだけの場合は、プライバシーURLには仮に自分のウェブサイトを入力しても構いません)。

手順F: Fire TVプロジェクトにAPIキーを追加する

この手順では、セキュリティプロファイルから生成したAPIキーをFire TVプロジェクトに追加します。これにより、アプリがAmazon Device Messaging(ADM)からメッセージを受信できるようになります。APIキーをアプリに追加する方法は以下のとおりです。

  1. Android StudioでFire TV対応アプリのプロジェクトを開きます。
  2. プロジェクトのassetsフォルダにapi_key.txtという名前のファイルを作成します。このファイルは、必ずassetsフォルダに配置するようにしてください。
  3. api_key.txtファイルにAPIキーを挿入します。これ以外のデータは含めないでください。

手順G: 開発者コンソールにAPKをアップロードする

アプリをまだ開発者コンソールにアップロードしていない場合は、公開しない場合でも、セキュリティプロファイルを特定のアプリのパッケージ名に関連付けるためにアプリをアップロードする必要があります。

通常、ほとんどのパートナーは既に開発者コンソールにアプリを登録済みです。未登録の場合や、Fire TV対応サンプルアプリを使用している場合は、たとえローカルの開発環境を構築するだけであっても、アプリを開発者コンソールにアップロードしてセキュリティプロファイルを有効にする必要があります。

まず、次のように、Android Studioで署名付きAPKを生成します。

  1. Android Studioで署名付きAPKを生成するには、[Build] メニューの [Generate Signed Bundle / APK] をクリックします。[APK] を選択し、[Next] をクリックします。
  2. アップロード後にAmazonによってアプリの署名が行われる場合は、ここでの署名にどの鍵が使用されていても構いません(これは、アップロード後にAmazonが単純に再署名を行うためです)。自分で作成した署名を管理している場合は、適切な鍵を選択して署名をしてください。[Next] をクリックします。
  3. 保存先フォルダ(releaseなど)を選択します。[V1 (Jar Signature)] チェックボックスをオンにします。[Finish] をクリックします。
  4. Android Studioがプロジェクトをビルドすると、小さなメッセージウィンドウが表示され、作成されたAPKの保存先フォルダを開くための [locate] リンクが示されます。[locate] をクリックして保存先フォルダを開くと、APKに簡単にアクセスできます。

    生成されたAPKの場所を確認する
    生成されたAPKの場所を確認する

次に、開発者コンソールのアプリにAPKをアップロードします。

  1. 開発者コンソールにログインし、ダッシュボードに移動します(右上隅にある [開発者コンソール] リンクをクリックしてください)。
  2. [アプリ&サービス] から [マイアプリ] をクリックします。
  3. 右下隅にある [新規アプリを追加] をクリックし、[Android] を選択します。
  4. [アプリタイトル] フィールドにアプリの名前を指定し、[アプリのカテゴリー] フィールドにカテゴリーを指定します(これらのフィールドの詳細については、アプリ申請プロセスの一般情報を入力するを参照してください)。
  5. [保存] をクリックします。
  6. [APKファイル] タブをクリックします。フィールドが編集可能になっていない場合は、右下隅の [編集] をクリックしてください。
  7. APKファイルを、保存先フォルダ(APKファイルが生成されている場所)から、開発者コンソールの [APKファイル] タブの [APKをここにドロップ] という表示のあるボックスにドラッグします。

    [APKファイル] タブの詳細については、APKファイルをアップロードするを参照してください。アプリの言語を選択し、そのほかの詳細も追加します。この手順はすべて、アプリの申請についての説明に従って後から行うことができます。ここでは、セキュリティプロファイルを関連付けるためにアプリが必要なだけです。セキュリティプロファイルはパッケージ名を必要とします。

  8. [保存] をクリックします。

手順H: アプリにセキュリティプロファイルを関連付ける

アプリにセキュリティプロファイルを関連付ける必要があります。これにより、Fire TVでアプリが承認されるようになります。アプリにセキュリティプロファイルを関連付けるには、次の手順を実行します。

  1. 開発者コンソールでアプリを表示するには、https://developer.amazon.comにログインして [アプリ&サービス] をクリックし、[マイアプリ] をクリックします。次に、アプリを選択します。
  2. アプリ名のすぐ下にあるメニューから、[アプリサービス] タブをクリックします。

    アプリサービスを選択する
    アプリサービスを選択する
  3. [セキュリティプロファイル] セクションで、[既存のセキュリティプロファイルを選択するか、新規作成します] を展開します。[セキュリティプロファイル] ドロップダウンが表示されるので、先ほど作成したセキュリティプロファイルを選択し、[セキュリティプロファイルを有効にする] をクリックします。

    アプリにセキュリティプロファイルを選択する
    アプリにセキュリティプロファイルを選択する

    「セキュリティプロファイル "{名前}"がアプリに対して有効になりました」という確認メッセージと、関連付けられたセキュリティプロファイルの詳細が表示されます。

  4. [デバイスメッセージング] セクションで、[デバイスメッセージングを有効にする] ボタンをクリックします。

    デバイスメッセージングを有効にする
    デバイスメッセージングを有効にする
  5. Login with Amazonセクションにも、同じセキュリティプロファイルが、関連付けられたプロファイルとして表示されるはずです。何らかの理由でLogin with Amazonでもこれを有効にするように求められた場合は、有効にしてください。

    アプリにセキュリティプロファイルをいったん関連付けると、そのセキュリティプロファイルの関連付けを削除または変更することはできません。

手順I: adbを使用してFire TVに接続する

ここまでの手順で、セキュリティプロファイルの構成が完了し、準備が整いました。この手順では、Fire TV対応アプリを実行し、すべてが正常に機能して承認が成功するかを確認します。Fire TVでアプリを実行する方法の詳細については、adbを使用してFire TVに接続するを参照してください。以下に、その方法を簡単に説明します。

  1. Fire TVで、[My Fire TV] > [開発者オプション] の順にクリックします。[ADBデバッグ][不明ソースからのアプリ] を有効にします。
  2. Fire TVで、[設定] から、[My Fire TV] > [バージョン情報] > [ネットワーク] の順にクリックします(Fire TVの一部のモデルでは、[My Fire TV] ではなく [端末] と表示される場合があります)。画面に表示されているIPアドレスをメモします。
  3. ターミナルウィンドウを開き、次のコマンドを実行します。

    adb connect <ipaddress>:<port>
    

    以下に例を示します。

    adb connect 10.49.172.51:5555
    

    接続の問題が発生した場合は、adbを使用してFire TVに接続するを参照して詳細を確認してください。

  4. Fire TVに正常に接続できたら、Android Studioを開き、[Run App] ボタンRun Appをクリックしてアプリを実行します。
  5. 接続先のFire TVデバイスを選択し、[OK] をクリックします。

    対象のFire TVデバイスを選択する
    対象のFire TVデバイスを選択する
  6. アプリが実行されていることを確認します。Android StudioでLogcatを開き、ログメッセージをモニタリングします。アプリが実行されていれば、セキュリティプロファイルは正しく構成されたことになります。

    フィンガープリントに関する問題が発生した場合は、トラブルシューティングを参照してください。

トラブルシューティング

このセクションでは、よく発生するエラーとその修正方法を説明します。Fire TVでアプリを実行し、Android StudioでLogcatを開くと、Fire TVでアプリのインストールや実行が失敗した理由を確認できます。エラーをフィルタリングすると、関連するメッセージを見つけやすくなる場合があります。

エラー: Fingerprint checking:<obscured> W/com.amazon.identity.auth.device.appid.APIKeyDecoder: Failed to decode: Decoding failed: certificate fingerprint can't be verified!

セキュリティプロファイルのフィンガープリント認証が原因でアプリが失敗しています。上記の各セクションの手順に従って、セキュリティプロファイルがアプリのパッケージ名に関連付けられていることを確認してください。

エラー: com.amazon.identity.auth.device.appid.APIKeyDecoder: Unable to decode APIKey for pkg=com.some.package.name

セキュリティプロファイルのAPIキーが原因でアプリが失敗しています。上記の各セクションの手順に従って、セキュリティプロファイルがアプリに関連付けられていることを確認してください。

エラー: java.lang.IllegalArgumentException: Invalid API Key

APIキーは有効であっても、Android Studioが正しい署名構成でアプリに署名していない可能性があります。

次のステップ

次の 手順6: Lambdaパッケージを作成・デプロイするに進みます。