(従来の)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 レイヤーに応答します。
Experience Cloud ID サービスの設定(訪問者 ID) visitorIDSetup
Experience Cloud ID の値の設定は、Analytics の観点から重要です。 visitorID の値が設定されると、SDKはネットワーク呼び出しごとにこの情報を送信し、Adobe Pass Authentication Server がこの情報を収集します。 Adobe Pass Authentication Service の Analytics を、他のアプリケーションや Web サイトからの他の分析レポートと関連付けることができます。 visitorID の設定方法について詳しくは、 こちら を参照してください。
使用権限フロー entitlement
回答: 前提条件
B. 起動フロー
C. Apple SSO を使用しない認証フロー
D. iOS上のApple SSO での認証フロー
E. tvOS のApple SSO での認証フロー
F. 認証フロー
G. メディアフローを表示
時間 Apple SSO を使用しないログアウトフロー
私。 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:urlAPI メソッドを呼び出します。このメソッドは、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 () を呼び出して、認証フローを開始します。
- 依存関係: 有効な ResourceID が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:urlAPI メソッドを呼び出す必要があります。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 を使用して、すべてのリダイレクトに従っていることを確認します。 そのため、ログアウト処理中にコントローラを非表示(つまり非表示)にすることが可能です(推奨)。
I. Apple SSO でのログアウトフロー logout_flow_with_AppleSSO
logout()を呼び出してユーザーをログアウトさせます。- status () コールバックは、ID VSA203 で呼び出されます。
- また、システム設定からもログインするようにユーザーに指示する必要があります。 これをおこなわないと、アプリケーションが再起動された際に再認証が行われます。