Adobe Pass認証コンポーネント
Adobe Primetime(旧Adobe Pass)は、メディアを視聴する前にログインを要求するための認証メカニズムを提供します。ユーザーはISPまたはコンテンツプロバイダーにログインし、その認証情報を通じてアプリに認証されます。Adobe Primetimeの詳細については、こちらを参照してください。
- Adobe Passのユーザーエクスペリエンス
- Adobe Pass認証コンポーネントの構成
- 手順1:アプリでAdobe Pass認証コンポーネントを構成する
- 手順2:Adobe Primetimeのキーを暗号化する
- 手順3:Adobe Primetimeのログインプロンプトの文字列を構成する
- 手順4:Adobe Primetimeの画面のスタイルをカスタマイズする
- 手順5:どの画面でユーザーにログインを求めるかを構成する
- コンテンツプロバイダーのロゴをユーザーに表示する方法
- ログインが必要なコンテンツと無料コンテンツの同時提供
Adobe Passのユーザーエクスペリエンス
ここでは、サンプルアプリを通じてAdobe Pass/Primetimeの構成の例を紹介します。
ユーザーがコンテンツの詳細画面で [今すぐ観る] ボタンをクリックすると、Adobe Primetimeのログインプロンプトが表示されます。
ユーザーは、コンピューターでブラウザを開き、指定のURL(この例ではwww.example.com/amazon/firetv)にアクセスして、登録コードを入力します。ケーブルプロバイダーにもログインします。
登録コードとケーブルプロバイダーの認証情報を入力すると、ユーザーがログインされ、次のような成功の画面が表示されます(これらのURLと画面は、開発者がAdobe Primetimeアカウントで構成します)。
ユーザーはFire TVに戻り、[送信] ボタンをクリックしてログインします。これで、アプリでユーザーがメディアを視聴できるようになります。
ログインに失敗した場合は、問題を示すエラーメッセージがユーザーの画面に表示されます。
Adobe Pass認証コンポーネントの構成
Adobe Pass認証コンポーネントを構成するには、次の5つの手順を実行します。
- 手順1:アプリでAdobe Pass認証コンポーネントを構成する
- 手順2:Adobe Primetimeのキーを暗号化する
- 手順3:Adobe Primetimeのログインプロンプトの文字列を構成する
- 手順4:Adobe Primetimeの画面のスタイルをカスタマイズする
- 手順5:どの画面でユーザーにログインを求めるかを構成する
手順1:アプリでAdobe Pass認証コンポーネントを構成する
Adobe Pass認証コンポーネントには、カスタマイズできるファイルのグループが3つあります。これらを通じて、Adobe Passの情報とユーザーに表示されるFire TVのユーザーインターフェイスを構成できます。
Adobe Pass認証コンポーネントを構成するには、次の手順を実行します。
-
アプリにAdobe Pass認証コンポーネントを読み込みます。アプリにコンポーネントを読み込む方法の詳細については、アプリ内のコンポーネントを追加または削除するを参照してください。
アプリにほかの認証コンポーネント(FacebookAuthComponentやLoginWithAmazonComponentなど)が読み込まれている場合は、すべて削除してください。詳細については、アプリ内のコンポーネントを追加または削除するを参照してください。
注: 読み込むことができるコンポーネントは、インターフェイスごとに1つだけです。たとえば、Adobe Pass認証コンポーネントとパススルーログインコンポーネントは、どちらも同じIAuthentication
インターフェイスを使用するため、両方を同時に読み込むことはできません。インターフェイスごとのコンポーネント一覧は、コンポーネントの概要を参照してください。 - AdobePassAuthComponent > res > valuesに移動し、custom.xmlファイルを開きます。
-
次の値をコピーし、アプリの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>
-
次の表の説明に従って、各プロパティの値をカスタマイズします。
値 説明 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のパブリックキーとプライベートキーを暗号化するには、次の手順を実行します。
- [Android] ビューで、Utils > java > com > amazon > utils > securityフォルダを展開し、ResourceObfuscationStandaloneUtilityクラスを開きます。
-
getRandomStringsForKey()
メソッドに、(コンポーネントのcustom.xmlファイルで)random_key_1
、random_key_4
、random_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
として使用した値です。
-
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
として使用した値です(前と同じ)。
-
getPlainTextToEncrypt()
メソッドで、Encrypt_this_text
の代わりにAdobe Passパブリックキーを入力します。private static String getPlainTextToEncrypt() { return "Encrypt_this_text"; }
-
ResourceObfuscationStandaloneUtility.javaファイルを右クリックし、[Run 'ResourceObfusc…main()] を選択します。
-
暗号化された結果がコンソールに出力されていることを確認します。これは次のようになります。
Encrypted version of plain text 123456789 is gnobHJEIxnkBMobJk7mBaQ==
-
暗号化されたキーをコピーします。このキーを、アプリの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>
-
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>
ヒント: ランダムキーは、必要時にすぐに参照できるように、社内のwikiなどの安全な場所に保管してください。
その他の値を暗号化する
暗号化ユーティリティは、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のログインプロンプト画面に表示される文字列は、開発者が構成できます。
また、ログインの失敗時に表示されるエラーメッセージ画面のテキストを制御することもできます。
これらの画面のテキストをカスタマイズするには、次の手順を実行します。
- AdobepassAuthComponent > res > valuesに移動し、strings.xmlファイルを開きます。
-
各要素の文字列値をカスタマイズします。
<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のログインユーザーインターフェイスのロゴと色をカスタマイズできます。
スタイルをカスタマイズするには、次の手順を実行します。
- AdobepassAuthComponent > res > valuesに移動し、styles.xmlファイルを開きます。
-
各要素の文字列値をカスタマイズします。要素の名前とテキストが表示に与える影響については、上記のスクリーンショットを参照してください。
<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
でのみ認証が要求されるようにすると、未認証のユーザーにアプリのメディアに興味を持ってもらい、ログインする動機につなげられる可能性があります。
どの画面で認証を要求するかを構成するには、次の手順を実行します。
- Navigator.jsonファイル(app > assets内)を開きます。
-
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のアプリを紹介します。最初の画面ではユーザーがログインしていないため、プロバイダーのロゴは表示されません。
ユーザーがログインすると、アプリのロゴの右側にプロバイダーのロゴ(「Quantum Vu」)が表示されます。
ユーザーがログインしているプロバイダーのロゴを追加するには
アプリの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でプロバイダーのロゴを表示するために必要なのは上記のプロパティだけです。
プロバイダーのロゴの機能をテストするには、アプリの下部に表示される [ログイン] ボタンと [ログアウト] ボタンを使用して、アプリへのログインとログアウトを実行します。
ログインが必要なコンテンツと無料コンテンツの同時提供
ログインが必要なコンテンツを提供している場合でも、ログイン不要の無料コンテンツを同時に提供することができます。そのためには、フィードで「無料」を示すタグをマッピングします。ログインが必要なコンテンツと無料コンテンツの同時提供を参照してください。