iOS/tvOS SDK クックブック iostvos-sdk-cookbook
概要 intro
このドキュメントでは、iOS/tvOS AccessEnabler ライブラリによって公開される API を使用して、プログラマーの上位レベルのアプリケーションが実装できる使用権限ワークフローについて説明します。
iOS/tvOS 用のAdobe Pass認証使用権ソリューションは、最終的に次の 2 つのドメインに分かれます。
-
UI ドメイン - UI を実装する上位レベルのアプリケーションレイヤーで、AccessEnabler ライブラリが提供するサービスを使用して、制限されたコンテンツにアクセスします。
-
AccessEnabler ドメイン:ここで、次の形式で使用権限ワークフローが実装されます。
- Adobeのバックエンドサーバーに対して行われたネットワーク呼び出し
- 認証および承認ワークフローに関連するビジネスロジックルール
- 様々なリソースの管理とワークフロー状態の処理(トークンキャッシュなど)
AccessEnabler ドメインの目的は、使用権限ワークフローの複雑さを全て隠し、AccessEnabler ライブラリを通じて上位レイヤー・アプリケーションに使用権限ワークフローを実装するためのシンプルな使用権限プリミティブのセットを提供することです。
- 要求者 ID の設定
- 特定の ID プロバイダーに対する認証の確認と取得
- 特定のリソースに対する認証の確認と取得
- ログアウト
- Apple VSA フレームワークをプロキシすることで、Apple SSO フローを生成します。
AccessEnabler のネットワーク・アクティビティは独自のスレッドで実行されるため、UI スレッドがブロックされることはありません。 その結果、2 つのアプリケーションドメイン間の双方向通信チャネルは、次のような完全に非同期のパターンに従う必要があります。
- UI アプリケーション レイヤは、AccessEnabler ライブラリによって公開された API 呼び出しを介して、AccessEnabler ドメインにメッセージを送信します。
- AccessEnabler は、UI レイヤーが AccessEnabler ライブラリに登録する AccessEnabler プロトコルに含まれるコールバック・メソッドを介して UI レイヤーに応答します。
訪問者 ID サービスの設定(Experience CloudID) visitorIDSetup
Experience CloudID の値の設定は、Analytics の観点から重要です。 visitorID
値が設定されると、SDK はネットワーク呼び出しごとにこの情報を送信し、Adobe Pass 認証サーバーがこの情報を収集します。 Adobe Pass Authentication Service の Analytics を、他のアプリケーションや Web サイトからの他の分析レポートと関連付けることができます。 visitorID の設定方法について詳しくは、 こちらを参照してください。
使用権限フロー entitlement
A. 前提条件
B. 起動フロー
C. Apple SSO を使用しない認証フロー
D. iOS上のApple SSO による認証フロー
E. tvOS のApple SSO での認証フロー
F. 認証フロー
G. メディアフローを表示
H. Apple SSO を使用しないログアウトフロー
I. Apple SSO でのログアウトフロー
A.前提条件 prereqs
-
コールバック関数を作成します。
-
setRequestorComplete()
-
setRequestor ()によってトリガーされ、成功または失敗を返します。
-
成功とは、資格コールを続行できることを示します。
-
- ユーザーがプロバイダー(MVPD)を選択しておらず、まだ認証されていない場合にのみ、
getAuthentication()
によってトリガーされます。 mvpds
パラメーターは、ユーザーが使用できるプロバイダーの配列です。
- ユーザーがプロバイダー(MVPD)を選択しておらず、まだ認証されていない場合にのみ、
-
setAuthenticationStatus(status, errorcode)
- 毎回
checkAuthentication()
によってトリガーされます。 - ユーザーが既に認証済みで、プロバイダーを選択している場合にのみ、
getAuthentication()
によってトリガーされます。 - 返されるステータスは成功または失敗です。エラーコードは失敗のタイプを示します。
- 毎回
-
- ユーザーが MVPD を選択した後、
getAuthentication()
によってトリガーされます。url
パラメーターは、MVPD のログインページの場所を指定します。
- ユーザーが MVPD を選択した後、
-
sendTrackingData(event, data)
checkAuthentication()
、getAuthentication()
、checkAuthorization()
、getAuthorization()
、setSelectedProvider()
によってトリガーされます。event
パラメーターは、どの使用権限イベントが発生したかを示します。data
パラメーターは、イベントに関連する値のリストです。
-
setToken(token, resource)
- リソースの表示が正常に認証された後に、checkAuthorization ()および getAuthorization ()によってトリガーされます。
token
パラメーターは短時間のみ有効なメディアトークンです。resource
パラメーターは、ユーザーが表示を許可されているコンテンツです。
-
tokenRequestFailed(resource, code, description)
- 認証に失敗した後、checkAuthorization ()および getAuthorization ()によってトリガーされます。
resource
パラメーターは、ユーザーが表示しようとしたコンテンツです。code
パラメーターは、エラーのタイプを示すエラーコードです。description
パラメーターは、エラーコードに関連付けられたエラーの説明です。
-
selectedProvider(mvpd)
getSelectedProvider()
によってトリガーされます。mvpd
パラメーターは、ユーザーが選択したプロバイダーに関する情報を提供します。
-
setMetadataStatus(metadata, key, arguments)
getMetadata().
によってトリガーmetadata
パラメーターは、要求された特定のデータを提供します。key
パラメーターは、getMetadata ()要求で使用されるキーで、arguments
パラメーターは、getMetadata ()に渡されたディクショナリと同じです。
-
'preauthorizedResources (authorizedResources)'
-
checkPreauthorizedResources()
によってトリガーされます。 -
authorizedResources
パラメーターは、ユーザーを表すリソースを指定します
は閲覧を許可されています。
-
-
presentTvProviderDialog (viewController)
- 現在のリクエスターが 🔗SSO サポートを持つ MVPD で少なくともサポートしている場合に、getAuthentication ()によってトリガーされます。
- viewController パラメーターはAppleの SSO ダイアログであり、メインビューコントローラーで表示する必要があります。
-
'dismissTvProviderDialog (viewController)'
- ユーザーアクションによってトリガーされます(Apple SSO ダイアログで「キャンセル」または「その他のテレビプロバイダー」を選択します)。
- viewController パラメーターはApple SSO ダイアログであり、メインビューコントローラーから閉じる必要があります。
-
B.起動フロー startup_flow
-
上位レベルのアプリケーションを起動します。
-
Adobe Pass Authentication
の開始a.
init
を呼び出して、Adobe Pass Authentication AccessEnabler のインスタンスを 1 つ作成します。- 依存関係: Adobe Pass認証ネイティブ iOS/tvOS ライブラリ (AccessEnabler)
b.
setRequestor()
を呼び出して、プログラマーの ID を確立します。プログラマーのrequestorID
と(オプションで)Adobe Pass Authentication エンドポイントの配列を渡します。 tvOS の場合は、公開鍵と秘密鍵も指定する必要があります。 詳しくは、 クライアントレスドキュメントを参照してください。-
依存関係: 有効なAdobe Pass認証要求者 ID (Adobe Pass認証アカウントで動作)
マネージャーが手配します)。 -
トリガー:
setRequestorComplete ()コールバック。
note note NOTE 要求者 ID が完全に確立されるまでは、使用権限の要求を完了できません。 これは、 setRequestor()
の実行中に、後続のすべての使用権限リクエストが行われることを事実上意味します。 例えば、checkAuthentication()
はブロックされます。2 つの実装オプションがあります。要求者の識別情報がバックエンドサーバーに送信されると、UI アプリケーションレイヤーは次の 2 つの方法のいずれかを選択できます。
-
setRequestorComplete()
コールバックのトリガー(AccessEnabler デリゲートの一部)を待ちます。 このオプションを使用すると、最も確実性の高い処理setRequestor()
完了するので、ほとんどの実装に対してこのオプションを使用することをお勧めします。 -
setRequestorComplete()
コールバックのトリガーを待たずに続行し、使用権限リクエストの発行を開始します。 これらの呼び出し(checkAuthentication、checkAuthorization、getAuthentication、getAuthorization、checkPreauthorizedResource、getMetadata、logout)は AccessEnabler ライブラリによってキューに入れられ、setRequestor()
の後で実際のネットワーク呼び出しが行われます。 このオプションは、ネットワーク接続が不安定な場合などに中断されることがあります。
-
完全な認証フローを開始せずに既存の認証を確認するには、
checkAuthentication()
を呼び出します。 この呼び出しが成功した場合は、認証フローに直接進むことができます。 そうでない場合は、認証フローに進みます。-
依存関係: setRequestor ()の呼び出しに成功しました(この依存関係は、以降のすべての呼び出しにも適用されます)。
-
トリガー: setAuthenticationStatus ()コールバック。
-
C. Apple SSO を使用しない場合の認証フロー authn_flow_wo_applesso
-
getAuthentication()
を呼び出して認証フローを開始するか、ユーザーが既に存在することを確認します
認証済み。トリガー:
-
setAuthenticationStatus ()コールバック (ユーザーが既に認証されている場合)。 この場合は、 認証フローに直接進みます。
-
displayProviderDialog ()コールバック (ユーザーがまだ認証されていない場合)
-
-
に送信されたプロバイダーのリストをユーザーに表示します
displayProviderDialog()
。 -
ユーザーがプロバイダーを選択したら、
navigateToUrl:
またはnavigateToUrl:useSVC:
コールバックからユーザーの MVPD の URL を取得し、UIWebView/WKWebView
またはSFSafariViewController
コントローラーを開いて、そのコントローラーをその URL に誘導します。 -
前の手順でインスタンス化された
UIWebView/WKWebView
またはSFSafariViewController
を使用して、ユーザーは MVPD のログインページに移動し、ログイン資格情報を入力します。 コントローラ内では、いくつかのリダイレクト操作が行われます。
null
をパラメータとして setSelectedProvider ()を呼び出して、AccessEnabler にこのイベントを通知します。 これにより、AccessEnabler は内部状態をクリーンアップし、認証フローをリセットできます。-
ユーザーが正常にログインすると、アプリケーションレイヤーが特定のカスタム URL の読み込みを検出します。 この特定のカスタム URL は、実際には無効であり、コントローラーが実際に読み込むことを目的としたものではないことに注意してください。 認証フローが完了し、
UIWebView/WKWebView
またはSFSafariViewController
のコントローラーを安全に閉じることができることを示すシグナルとして、アプリケーションによって解釈される必要があります。SFSafariViewController
コントローラーを使用する必要がある場合、特定のカスタム URL はapplication's custom scheme
によって定義されます(例:adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com
)。そうでない場合、この特定のカスタム URL はADOBEPASS_REDIRECT_URL
定数によって定義されます(つまり、adobepass://ios.app
)。 -
UIWebView/WKWebView または SFSafariViewController コントローラを閉じて、AccessEnabler の
handleExternalURL:url
API メソッドを呼び出します。このメソッドは、AccessEnabler にバックエンド サーバから認証トークンを取得するように指示します。 -
(オプション)
checkPreauthorizedResources(resources)
を呼び出して、ユーザーが表示を許可されているリソースを確認します。resources
パラメーターは、ユーザーの認証トークンに関連付けられた、保護されたリソースの配列です。 ユーザーの MVPD から取得する認証情報の用途の 1 つは、UI を装飾することです(例えば、保護されたコンテンツの横にあるロックされた記号やロック解除された記号など)。- トリガー:
preauthorizedResources()
コールバック - 実行ポイント: 完了した認証フロー後
- トリガー:
-
認証に成功した場合は、認証フローに進みます。
D. iOS上のApple SSO での認証フロー authn_flow_with_applesso
-
getAuthentication()
を呼び出して認証フローを開始するか、ユーザーが既に認証されていることを確認します。
トリガー:- presentTvProviderDialog ()コールバック(ユーザーが認証されておらず、現在のリクエスターに SSO をサポートする MVPD が存在する場合)。 MVPD が SSO をサポートしていない場合は、クラシック認証フローが使用されます。
-
ユーザーがプロバイダを選択すると、AccessEnabler ライブラリは、Appleの VSA フレームワークから提供された情報を使用して認証トークンを取得します。
-
setAuthenticatiosStatus ()コールバックがトリガーされます。 この時点で、ユーザーはApple SSO で認証される必要があります。
-
[ オプション ]
checkPreauthorizedResources(resources)
を呼び出して、ユーザーが表示を許可されているリソースを確認します。resources
パラメーターは、ユーザーの認証トークンに関連付けられた、保護されたリソースの配列です。 ユーザーの MVPD から取得する認証情報の用途の 1 つは、UI を装飾することです(例えば、保護されたコンテンツの横にあるロックされた記号やロック解除された記号など)。- トリガー:
preauthorizedResources()
コールバック - 実行ポイント: 完了した認証フロー後
- トリガー:
-
認証に成功した場合は、認証フローに進みます。
E. tvOS のApple SSO での認証フロー authn_flow_with_applesso_tvOS
-
getAuthentication()
を呼び出して、
認証フロー、またはユーザーが既に存在することを確認するために使用します
認証済み。
トリガー:presentTvProviderDialog()
コールバック(ユーザーが認証されておらず、現在のリクエスターに SSO をサポートする MVPD が少なくとも存在する場合)。 MVPD が SSO をサポートしていない場合は、クラシック認証フローが使用されます。
-
ユーザーがプロバイダーを選択すると、
status()
コールバックが呼び出されます。 登録コードが提供され、AccessEnabler ライブラリが 2 番目の画面の認証を正常に行うためにサーバのポーリングを開始します。 -
指定した登録コードを使用して 2 番目の画面で正常に認証された場合は、
setAuthenticatiosStatus()
コールバックがトリガーされます。 この時点で、ユーザーはApple SSO で認証される必要があります。 -
[ オプション ]
checkPreauthorizedResources(resources)
を呼び出して、ユーザーが表示を許可されているリソースを確認します。resources
パラメーターは、ユーザーの認証トークンに関連付けられた、保護されたリソースの配列です。 ユーザーの MVPD から取得する認証情報の用途の 1 つは、UI を装飾することです(例えば、保護されたコンテンツの横にあるロックされた記号やロック解除された記号など)。-
トリガー:
preauthorizedResources()
コールバック -
実行ポイント: 完了した認証フロー後
-
-
認証に成功した場合は、認証フローに進みます。
F.認証フロー authz_flow
-
getAuthorization ()を呼び出して、認証フローを開始します。
- 依存関係: 有効なリソース ID が MVPD と合意されました。
- リソース ID は、他のデバイスまたはプラットフォームで使用される ID と同じである必要があり、MVPD 間でも同じになります。 リソース ID について詳しくは、「 保護されたリソースの識別」を参照してください
-
認証と承認を検証します。
-
getAuthorization ()呼び出しが成功した場合:ユーザーに有効な AuthN および AuthZ トークンがある(ユーザーは認証され、リクエストされたメディアを監視する権限を持つ)。
-
getAuthorization ()が失敗した場合:スローされた例外を調べて、その型(AuthN、AuthZ など)を特定します。
- 認証(AuthN)エラーの場合は、認証フローを再開します。
- 認証(AuthZ)エラーの場合、ユーザーは要求されたメディアを監視する権限がなく、何らかのエラーメッセージがユーザーに表示されます。
- その他のタイプのエラー(接続エラー、ネットワークエラーなど)が発生した場合 次に、適切なエラーメッセージをユーザーに表示します。
-
-
ショートメディアトークンを検証します。
Adobe Pass認証メディアトークンベリファイアライブラリを使用して、上記の getAuthorization ()呼び出しから返された短時間のみ有効なメディアトークンを確認します。- 検証に成功した場合:ユーザーに要求されたメディアを再生します。
- 検証に失敗した場合:AuthZ トークンが無効でした。メディアリクエストが拒否され、エラーメッセージがユーザーに表示されます。
-
通常のアプリケーションフローに戻ります。
G. メディアフローを表示 media_flow
-
表示するメディアを選択します。
-
メディアは保護されていますか? 選択したメディアが保護されているかどうかを確認します。
-
選択したメディアが保護されている場合、アプリケーションは上記の 認証フローを開始します。
-
選択したメディアが保護されていない場合、メディアを再生する時間
ユーザー。
-
H. Apple SSO を使用しないログアウト logout_flow_wo_AppleSSO
-
logout()
を呼び出してユーザーをログアウトさせます。 AccessEnabler は、キャッシュされたすべての値とトークンをクリアします。 キャッシュをクリアした後、AccessEnabler はサーバ・コールを実行してサーバ・サイド・セッションをクリーンアップします。 サーバーコールは IdP への SAML リダイレクトを引き起こす可能性があるので(これにより、IdP 側でのセッションクリーンアップが可能になります)、このコールはすべてのリダイレクトに従う必要があります。 このため、この呼び出しは UIWebView/WKWebView または SFSafariViewController コントローラ内で処理する必要があります。a.認証ワークフローと同じパターンに従って、AccessEnabler ドメインは
navigateToUrl:
またはnavigateToUrl:useSVC:
コールバックを介して UI アプリケーション レイヤに対して UIWebView/WKWebView または SFSafariViewController コントローラの作成を要求し、コールバックのurl
パラメータで指定された URL をロードするように指示します。 これは、バックエンドサーバー上のログアウトエンドポイントの URL です。b. アプリケーションは、
UIWebView/WKWebView or SFSafariViewController
コントローラのアクティビティを監視し、特定のカスタム URL を読み込んだ瞬間を検出する必要があります。これは、複数のリダイレクトを実行するためです。 この特定のカスタム URL は、実際には無効であり、コントローラーが実際に読み込むことを目的としたものではないことに注意してください。 アプリケーションは、ログアウト フローが完了し、UIWebView/WKWebView
またはSFSafariViewController
コントローラを安全に閉じられるというシグナルとしてのみ解釈する必要があります。 コントローラがこの特定のカスタム URL を読み込む場合、アプリケーションはUIWebView/WKWebView or SFSafariViewController
コントローラを閉じて、AccessEnabler のhandleExternalURL:url
API メソッドを呼び出す必要があります。SFSafariViewController
コントローラーを使用する必要がある場合、特定のカスタム URL はapplication's custom scheme
によって定義されます(例:adbe.u-XFXJeTSDuJiIQs0HVRAg://adobe.com
)。それ以外の場合、この特定のカスタム URL はADOBEPASS_REDIRECT_URL
定数によって定義されます(つまり、adobepass://ios.app
)。note note NOTE ログアウトフローは、ユーザーが UIWebView/WKWebView または SFSafariViewController とやり取りする必要がないという点で、認証フローとは異なります。 UI アプリケーションレイヤーは、UIWebView/WKWebView または SFSafariViewController を使用して、すべてのリダイレクトに従っていることを確認します。 そのため、ログアウト処理中にコントローラを非表示(つまり非表示)にすることが可能です(推奨)。