開発者コンソール

Adobe Pass認証コンポーネント

Adobe Pass認証コンポーネント

 IV: コンポーネントを追加して機能を強化する

Adobe Primetime(旧Adobe Pass)は、メディアを視聴する前にログインを要求するための認証メカニズムを提供します。ユーザーはISPまたはコンテンツプロバイダーにログインし、その認証情報を通じてアプリに認証されます。Adobe Primetimeの詳細については、こちらを参照してください。

Adobe Passのユーザーエクスペリエンス

ここでは、サンプルアプリを通じてAdobe Pass/Primetimeの構成の例を紹介します。

ユーザーがコンテンツの詳細画面で [今すぐ観る] ボタンをクリックすると、Adobe Primetimeのログインプロンプトが表示されます。

Adobe Primetimeのログインプロンプト

ユーザーは、コンピューターでブラウザを開き、指定のURL(この例ではwww.example.com/amazon/firetv)にアクセスして、登録コードを入力します。ケーブルプロバイダーにもログインします。

Adobe Primetimeを使用した認証では、ユーザーがケーブルプロバイダーにログインする必要があります。

登録コードとケーブルプロバイダーの認証情報を入力すると、ユーザーがログインされ、次のような成功の画面が表示されます(これらのURLと画面は、開発者がAdobe Primetimeアカウントで構成します)。

ログイン成功

ユーザーはFire TVに戻り、[送信] ボタンをクリックしてログインします。これで、アプリでユーザーがメディアを視聴できるようになります。

ログインに失敗した場合は、問題を示すエラーメッセージがユーザーの画面に表示されます。

Adobe Primetimeによるログインに失敗したときに表示されるエラーメッセージの例

Adobe Pass認証コンポーネントの構成

Adobe Pass認証コンポーネントを構成するには、次の5つの手順を実行します。

手順1:アプリでAdobe Pass認証コンポーネントを構成する

Adobe Pass認証コンポーネントには、カスタマイズできるファイルのグループが3つあります。これらを通じて、Adobe Passの情報とユーザーに表示されるFire TVのユーザーインターフェイスを構成できます。

Adobe Pass認証コンポーネントを構成するには、次の手順を実行します。

  1. アプリにAdobe Pass認証コンポーネントを読み込みます。アプリにコンポーネントを読み込む方法の詳細については、アプリ内のコンポーネントを追加または削除するを参照してください。

    アプリにほかの認証コンポーネント(FacebookAuthComponentやLoginWithAmazonComponentなど)が読み込まれている場合は、すべて削除してください。詳細については、アプリ内のコンポーネントを追加または削除するを参照してください。

  2. AdobePassAuthComponent > res > valuesに移動し、custom.xmlファイルを開きます。
  3. 次の値をコピーし、アプリのcustom.xmlファイルに貼り付けます。

    <!-- Adobe PassクライアントレスAPIのリクエスターID -->
    <string name="adobe_pass_requestor_id">YOUR REQUESTOR ID</string>
    <!-- アプリ用の暗号化されたAdobe Passパブリックキー。
    KeyEncrypterStandaloneUtilityを使用して暗号化します -->
    <string name="encrypted_adobe_pass_public_key">YOUR ENCRYPTED PUBLIC KEY</string>
    <!-- アプリ用の暗号化されたAdobe Passシークレットキー。
    KeyEncrypterStandaloneUtilityを使用して暗号化します -->
    <string name="encrypted_adobe_pass_private_key">YOUR ENCRYPTED PRIVATE KEY</string>
    <!-- Adobe PassクライアントレスAPIの登録URL(セカンドスクリーンログイン用) -->
    <string name="adobe_pass_registration_url">YOUR REGISTRATION URL</string>
    <!-- Adobe PassクライアントAPIの登録トークンの有効期間 -->
    <string name="adobe_pass_registration_code_ttl">YOUR TIME TO LIVE VALUE</string>
    <!-- ユーザーが認証に使用するURL -->
    <string name="adobepass_login_instruction_line_2">Visit YOUR_AUTHENTICATION_URL</string>
    <!-- リソースを暗号化/復号化するためのランダムキーの生成に使用する疑似乱数文字列。
    これらのキーは、暗号化ユーティリティで使用されるキーと常に同期している必要があります -->
    <string name="random_key_1">random_key_1</string>
    <string name="random_key_2">random_key_2</string>
    <string name="random_key_3">random_key_3</string>
    <string name="random_key_4">random_key_4</string>
    
  4. 次の表の説明に従って、各プロパティの値をカスタマイズします。

    説明
    adobe_pass_requestor_id Adobe PrimetimeのリクエスターID。この値はアドビによって提供されます。
    encrypted_adobe_pass_public_key 暗号化されたAdobe Primetimeパブリックキー(アドビが提供)。このキーはアドビから提供されますが、自分で暗号化する必要があります。このキーを生成する方法の詳細については、Adobe Primetimeのキーを暗号化するを参照してください。
    encrypted_adobe_pass_private_key 暗号化されたAdobe Primetimeプライベートキー。このキーはアドビから提供されますが、自分で暗号化する必要があります。このキーを生成する方法の詳細については、Adobe Primetimeのキーを暗号化するを参照してください。
    adobe_pass_registration_url 登録URL。この値はアドビによって提供されます。
    adobe_pass_registration_code_ttl 登録コードの有効期限が切れるまでの時間。
    adobepass_login_instruction_line_2 ログインするためにユーザーがアクセスする場所に関する情報。
    random_key_1 パブリックキーとプライベートキーの暗号化に使用される乱数文字列。値には任意の英数字の文字列を入力します。
    random_key_2 パブリックキーとプライベートキーの暗号化に使用される乱数文字列。値には任意の英数字の文字列を入力します。
    random_key_3 パブリックキーとプライベートキーの暗号化に使用される乱数文字列。値には任意の英数字の文字列を入力します。
    random_key_4 パブリックキーとプライベートキーの暗号化に使用される乱数文字列。値には任意の英数字の文字列を入力します。

手順2:Adobe Primetimeのキーを暗号化する

Adobe Primetimeアカウントをセットアップすると、パブリックキーとプライベートキーが提供されます。これらの値を安全に保護するために、Fire App BuilderのAdobe Pass認証コンポーネントは、セキュリティアルゴリズムを使用してキーを暗号化します。このアルゴリズムは、アプリのUtilsフォルダにあるResourceObfuscatorクラスとResourceObfuscationStandaloneUtilityクラスに実装されています。

Adobe Primetimeのパブリックキーとプライベートキーを暗号化するには、次の手順を実行します。

  1. [Android] ビューで、Utils > java > com > amazon > utils > securityフォルダを展開し、ResourceObfuscationStandaloneUtilityクラスを開きます。
  2. getRandomStringsForKey()メソッドに、(コンポーネントのcustom.xmlファイルで)random_key_1random_key_4random_key_3として使用した値をそれぞれ入力します。

    たとえば、custom.xmlファイルで次の乱数文字列を使用したとします。

    <string name="random_key_1">calypso</string>
    <string name="random_key_2">dadadadadappppp</string>
    <string name="random_key_3">more_random_stuff</string>
    <string name="random_key_4">something_random</string>
    

    この場合、ResourceObfuscationStandaloneUtilityクラスの文字列を次のようにカスタマイズします。

    private static String[] getRandomStringsForKey() {
    
        return new String[]{
                "calypso",
                "something_random",
                "more_random_stuff"
        };
    }
    

    この例の値はそれぞれ次のとおりです。

    • calypsoは、random_key_1として使用した値です。
    • something_randomは、random_key_4として使用した値です。
    • more_random_stuffは、random_key_3として使用した値です。
  3. getRandomStringsForIv()メソッドに、random_key_2およびrandom_key_3として使用した値をそれぞれ入力します。

        private static String[] getRandomStringsForIv() {
    
            return new String[]{
                    "dadadadadappppp",
                    "more_random_stuff"
            };
        }
    }
    

    この例の値はそれぞれ次のとおりです。

    • dadadadadapppppは、random_key_2として使用した値です。
    • more_random_stuffは、random_key_3として使用した値です(前と同じ)。
  4. getPlainTextToEncrypt()メソッドで、Encrypt_this_textの代わりにAdobe Passパブリックキーを入力します。

     private static String getPlainTextToEncrypt() {
            return "Encrypt_this_text";
        }
    
  5. ResourceObfuscationStandaloneUtility.javaファイルを右クリックし、[Run 'ResourceObfusc…main()] を選択します。

  6. 暗号化された結果がコンソールに出力されていることを確認します。これは次のようになります。

    Encrypted version of plain text 123456789 is gnobHJEIxnkBMobJk7mBaQ==
    
  7. 暗号化されたキーをコピーします。このキーを、アプリのcustom.xmlファイルにencrypted_adobe_pass_public_keyの値として貼り付けます(前のセクションと同じ手順に従います)。以下に例を示します。

    <string name="encrypted_adobe_pass_public_key">gnobHJEIxnkBMobJk7mBaQ==</string>
    <string name="encrypted_adobe_pass_private_key">YOUR ENCRYPTED PRIVATE KEY</string>
    
  8. getPlainTextToEncrypt()メソッドにAdobe Passプライベートキーを入力し、(同じ乱数文字列を使用して)スクリプトを再度実行します。暗号化されたキーを、アプリのcustom.xmlファイルにあるencrypted_adobe_pass_private_key文字列の値にコピーします。以下に例を示します。

    <string name="encrypted_adobe_pass_public_key">gnobHJEIxnkBMobJk7mBaQ==</string>
    <string name="encrypted_adobe_pass_private_key">bhjKDUYhdlkNNbUEYyvbn==</string>
    

その他の値を暗号化する

暗号化ユーティリティは、Adobe Primetimeのキーだけでなく、アプリで任意のキーを暗号化するためにも使用できます。キーの暗号化にはResourceObfuscatorStandaloneUitilityクラスを使用し、キーの復号化にはResourceObfuscatorクラスを使用します。

Adobe Pass認証コンポーネントでは、既にResourceObfuscatorクラスを利用してキーを復号化しています。開発者が(コンポーネントのcustom.xmlファイルに)入力した乱数文字列がResourceObfuscatorクラスに渡され、復号化が実行されます。Adobe Pass認証コンポーネントのAdobepassRestClient.javaクラスは、次のようにこのResourceObfuscatorクラスをインスタンス化し、乱数文字列を渡します。

  ResourceObfuscator obfuscator = new ResourceObfuscator();

        String plainKey = obfuscator.unobfuscate(key, getRandomStringsForKey(appContext),
                                                 getRandomStringsForIv(appContext));
        return plainKey;
    }

ただし、この暗号化手法はハッキングに対抗できるものではなく、ほかにもっと強力な暗号化方式があります。それでもこのアルゴリズムは、悪意のあるユーザーが簡単にキーを見つけて使用することを防ぐために役立ちます。

手順3:Adobe Primetimeのログインプロンプトの文字列を構成する

Adobe Primetimeのログインプロンプト画面に表示される文字列は、開発者が構成できます。

Adobe Primetimeのログインプロンプト

また、ログインの失敗時に表示されるエラーメッセージ画面のテキストを制御することもできます。

Adobe Passのエラーメッセージ

これらの画面のテキストをカスタマイズするには、次の手順を実行します。

  1. AdobepassAuthComponent > res > valuesに移動し、strings.xmlファイルを開きます。
  2. 各要素の文字列値をカスタマイズします。

    <string name="app_name">AdobepassAuthComponent</string>
    
       <string name="title_activity_adobe_authentication">認証</string>
       <string name="adobepass_login_instruction_line_1">コンピューターまたはモバイル端末を使用します。</string>
       <string name="adobepass_login_instruction_line_3">以下のコード(大文字小文字を区別)を入力してください。</string>
       <string name="adobepass_login_instruction_line_4">読み込み中…</string>
       <string name="btn_submit">送信</string>
       <string name="btn_get_new_code">新しいコードを取得</string>
       <string name="adobe_pass_error_authentication_message">アカウントの認証中にエラーが発生しました。後でもう一度お試しください。</string>
       <string name="adobe_pass_error_registration_message">アカウントの認証中にエラーが発生しました。後でもう一度お試しください。</string>
       <string name="adobe_pass_no_authorization_message">このビデオは、ご契約中のパッケージでは視聴できません。
    

手順4:Adobe Primetimeの画面のスタイルをカスタマイズする

アプリでは、Adobe Primetimeのログインユーザーインターフェイスのロゴと色をカスタマイズできます。

スタイルをカスタマイズするには、次の手順を実行します。

  1. AdobepassAuthComponent > res > valuesに移動し、styles.xmlファイルを開きます。
  2. 各要素の文字列値をカスタマイズします。要素の名前とテキストが表示に与える影響については、上記のスクリーンショットを参照してください。

        <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
        </style>
    
        <drawable name="company_logo">@drawable/logo</drawable>
        <drawable name="splash_background">@drawable/bg_generic_nopreview</drawable>
        <drawable name="action_button_focused">@drawable/btn_generic_focused</drawable>
        <color name="action_button_text_color">#E6FFFFFF</color>
        <color name="action_button_text_color_focused">#E6FFFFFF</color>
        <drawable name="action_button_normal">@drawable/btn_normal</drawable>
    

手順5:どの画面でユーザーにログインを求めるかを構成する

どの画面に認証を実装するかを構成する必要があります。たとえば、コンテンツレンダラー画面のPlaybackActivityでのみ認証が要求されるようにすると、未認証のユーザーにアプリのメディアに興味を持ってもらい、ログインする動機につなげられる可能性があります。

どの画面で認証を要求するかを構成するには、次の手順を実行します。

  1. Navigator.jsonファイル(app > assets内)を開きます。
  2. graphオブジェクトで、制限するアクティビティ(PlaybackActivityなど)を特定し、verifyScreenAccessをtrueに変更します。以下に例を示します。

    "com.amazon.android.uamp.ui.PlaybackActivity": {
      "verifyScreenAccess": true,
      "verifyNetworkConnection": true,
      "onAction": "CONTENT_RENDERER_SCREEN"
    }
    

コンテンツプロバイダーのロゴをユーザーに表示する方法

ユーザーがAdobe Passを使用してプロバイダーにログインしている場合、プロバイダーのロゴをアプリの画面に表示できます。そのためには、MVPD(多チャンネルビデオ番組配信業者)とそのロゴを定義するMVPD URLを指定します。

例として、Adobe Pass認証コンポーネントが統合されたHallmarkのアプリを紹介します。最初の画面ではユーザーがログインしていないため、プロバイダーのロゴは表示されません。

MVPDのロゴなし

ユーザーがログインすると、アプリのロゴの右側にプロバイダーのロゴ(「Quantum Vu」)が表示されます。

MVPDのロゴなし

ユーザーがログインしているプロバイダーのロゴを追加するには

アプリのcustom.xmlファイルにmvpd_urlという文字列を追加して、MVPDデータを指すように設定します。以下に例を示します。

<string name="mvpd_url">http://somedomain.com/where/my/mvpd/details/reside</string>

MVPDのURLは、次のようなJSON形式のデータを返す必要があります。

{
   "mvpdWhitelist":[
      {
         "mvpd":"xyz123",
         "loggedInImage":"http://www.xyz123.mysite.com/content/myimage" type="png"
      },
      {
         "mvpd":"qrs456",
         "loggedInImage":"http://www.qrs456.mysite.com/content/myfile" type="png"
      }
   ]
}

多くの場合、MVPDデータにはほかの値も含まれていますが、Fire App Builderでプロバイダーのロゴを表示するために必要なのは上記のプロパティだけです。

プロバイダーのロゴの機能をテストするには、アプリの下部に表示される [ログイン] ボタンと [ログアウト] ボタンを使用して、アプリへのログインとログアウトを実行します。

ログインが必要なコンテンツと無料コンテンツの同時提供

ログインが必要なコンテンツを提供している場合でも、ログイン不要の無料コンテンツを同時に提供することができます。そのためには、フィードで「無料」を示すタグをマッピングします。ログインが必要なコンテンツと無料コンテンツの同時提供を参照してください。