Adobe Primetime SSO(シングルサインオン)の統合ドキュメントの手順に従っても、期待どおりに動作しないことがあります。
ユーザーがよく直面する問題として、アプリ内のMVPD(Multi-Channel Video Programming Distributor)のリストからMVPDを選択してログインできないことがあります。ほかには、選択したMVPDへのログインに成功したものの、アプリ内のコンテンツを再生しようとするたびにログインを求められるという問題もあります。
このブログでは、このような問題の解決に役立つヒントを取り上げます。
Fire TVでのSSOの概要
SSOを使用すると、1つのSSOアプリで認証したユーザーが別のSSO対応アプリにログインする際、再度認証する必要がなくなります。Adobeが提供するPrimetime認証APIを使用すると、Fire TVでサードパーティのTV Everywhere(TVE)アプリにこの認証方法を簡単に設定できます。
Adobeでは、Fire TVクライアント開発者向けにAPIを含むスタブライブラリを提供しています。開発者は、Fire OSのシステムレベルAPIを使用してパーソナライズされたトークンを取得し、Adobe APIを呼び出す際にそれを使用する必要があります。また、Fire OSのシステムレベルAPIは、SSOコンパニオンアプリと呼ばれるFire TVシステムアプリ内にカプセル化されています。
以下の図は、SSOのワークフローを表したものです。
SSOワークフローには、次の4つの重要な手順があります。
以下は、SSOプロセスの各手順の概要です。
手順1: 初期化
この手順では、Androidクライアントアプリが、アプリに統合されたAdobe Primetime認証ネイティブAmazon Fire OSライブラリ(AccessEnabler)を初期化します。パーソナライズされたトークンを使用してアプリのIDを確認し、認証フローに進みます。
手順2: 認証
Androidクライアントアプリは認証フローを開始するか、ユーザーが既に認証されていることを確認します。ユーザーが認証されていない場合は、MVPDプロバイダーのリストが表示されます。ユーザーがプロバイダーを選択すると、プロバイダーのページが開き、ユーザーがログインできるようになります。ユーザーがログインに成功すると、バックエンドのAdobeサーバーから認証トークンが取得されます。トークンが検証されたら、ユーザーは認可フローに進みます。
手順3: 認可
Androidクライアントアプリは認可トークンを取得し、認証トークンと認可トークンを検証します。つまり、ユーザーが認証されており、リクエストしたメディアの視聴が許可されているかを確認します。認証(AuthN)エラーが発生した場合は、認証フローが再開されます。認可(AuthZ)エラーが発生した場合、ユーザーはリクエストしたメディアの視聴が許可されていないため、関連するエラーメッセージがユーザーに表示されます。認可に成功すると、有効期間の短いメディアトークンがAdobeのサーバーから返されます。
手順4: メディアトークンの発行
次に、認可フローから返された有効期間の短いメディアトークンをAdobeサーバーが検証します。検証に成功すると、Androidクライアントアプリはリクエストされたメディアを再生します。検証に失敗した場合は、AuthZトークンが無効だったことになり、メディアリクエストは拒否され、エラーメッセージがユーザーに表示されます。
SSOプロセスの概要は上記のとおりです。次に、発生する可能性のある問題とその解決方法を説明します。
ヒント1: Fire TVでSSOを使用する権限がアプリにない
前述のとおり、よくあるSSOの問題は、ユーザーがコンテンツを再生するために有効なMVPDプロバイダーを選択して(手順2: 認証の図を参照)ログインしようとしても、MVPDプロバイダーのログインページが表示される代わりに、プロバイダーを選択するページが再度表示されるというものです。
ユーザーは、このワークフローのエンタイトルメントの手順を行っています(図1: High-Level Single Sign-on Flowも参照)。
初めてユーザーを認証する呼び出しでは、有効な認証情報を使用して選択されたMVPDにユーザーを正常にログインさせ、返された認証トークンをバックエンドサーバーに保存する必要があります。その後の認証呼び出しでは、ユーザーが既に認証済みであることを確認してから、アプリへのシングルサインオンの権限をユーザーに付与することが理想です。しかし、これらの呼び出しでエラーが発生するとMVPDへのログイン要求が繰り返し表示されます。
このエラーは、単にFire TVプラットフォームでSSOを使用する権限がアプリにない、つまりSSOの許可リストにアプリが登録されていないことが原因である可能性があります。
図1のワークフローでは、認証が完了しているかをSSOコンパニオンアプリが確認する前に、アプリが許可リストに追加されているか(つまり、アプリがFire TVでSSOを使用する権限があるかどうか)を確認します。許可されていない場合、ユーザーは、MVPDリストが表示されるページ以降の手順に進むことができません。
これが、実際にログインの問題の原因であるかどうかを確認するには、デバイスログで次のエラーを探します。
E/OttSso_OttSsoService: Trying to verify app com.yourappname.yourpackagename but Approved apps list size is 0.
このエラーは、Fire TVプラットフォームでSSOを使用するための権限をアプリに付与する必要があることを意味します。この作業は、AmazonのFire TVソリューションアーキテクトと共同で行ってください。
アプリパッケージ名がSSOに対して承認されたら、デバイスキャッシュが更新されるまで24時間ほど待つ必要があります。引き続き同じエラーが発生する場合は、パッケージ名を確認してください。デバッグパッケージ名と本番パッケージ名の両方を許可リストに追加する必要があります。
引き続き同じエラーが発生する場合は、次のコマンドを使用してコンパニオンアプリのキャッシュを手動でクリアする必要があります。
adb shell pm clear com.amazon.tv.ottssocompanionapp
adb shell am force-stop com.amazon.tv.ottssocompanionapp
これで、ユーザーが再度アプリのログインワークフローを実行した際、デバイスログにE/OttSso_OttSsoServiceエラーが表示されず、有効な認証情報で正常にログインできるようになります。また、デバイスログには次の行が表示され、アプリがFire TVのSSOの許可リストに追加されたことの証拠となります。
I OttSso_OttSsoService: app setup complete, number of approved apps
ヒント2: Adobe SDKとSSOコンパニオンのバージョンが一致しない
アプリに統合されたAdobe SDKは、Fire TVのSSOコンパニオンシステムアプリを呼び出してSSO機能を提供するスタブライブラリです。Fire TVのアプリでSSOが正しく動作するためには、SSOコンパニオンアプリとアプリ内に統合されたAdobeスタブライブラリの両方を常に最新バージョンに保つ必要があります。
このアプリのバージョンをADBで確認するには、次のコマンドを使用します。
Mac:
adb shell dumpsys package com.amazon.tv.ottssocompanionapp | grep versionCode
Windows:
adb shell dumpsys package com.amazon.tv.ottssocompanionapp | find /I "versionCode"
結果:
旧バージョンの出力:
上記の例では、このデバイス上のSSOコンパニオンアプリの最終更新バージョン番号は4810です。ただし、最新バージョンのAdobe SDKでは、システムのSSOコンパニオンアプリのバージョン番号は5510以降である必要があります。SMPデバイスでSSOコンパニオンアプリを更新するには、デバイスの [設定] > [My Fire TV] > [バージョン情報] > [アップデートをチェック] の順にクリックします。Fire TV Editionデバイス(日本未対応)では、[Settings] > [Device & Software] > [About] > [Check for Updates] の順にクリックします。システムアップデートが表示されなくなるまで、このコマンドを繰り返し実行します。adbバージョンコマンドを再度実行すると、次のような結果が表示されるはずです。
デバイスのシステムOSを定期的に更新していないと、SSOの問題が発生する場合があります。このような問題を回避するには、アプリでバージョンチェックを実行し、アプリとデバイスOSを更新するようユーザーに通知する必要があります。
シングルサインオンの詳細については、Adobe Primetime認証Fire TV SDKに関するこちらのドキュメントを参照してください。