Amazon(LWA)のアクセストークンを取得する必要があります。このアクセストークンを、リクエストのたびにAVSに送信します。AndroidまたはiOSを統合することにより、アクセストークンを取得します。コンパニオンアプリには、認可コードを取得して安全に製品に転送するという役割があります。製品には、認可コードを使用し、LWAから、AVSへの呼び出しを行うために使用するアクセストークンとリフレッシュトークンを取得するという役割があります。このドキュメントでは、その方法について説明します。これとは別に、ヘッドレス製品をウェブサービスでAVSを使用するよう認可する場合は、コンパニオンサイトからの認可を参照してください。コンパニオンアプリを使用して、スマートスピーカーなどのヘッドレス端末を、AVSにアクセスし、ユーザーのアカウントと関連付けるよう、認可しようとしています。Alexa搭載のAndroidまたはiOSアプリケーションを認可する場合は、AVS製品からの認可を参照してください。SDKを統合する前に、製品はコードベリファイアを生成し、チャレンジコードを作成できる必要があります。チャレンジコードメソッドで指定されるこれらの値は、LWAがトークンの交換前に製品からのリクエストを検証するために使用します。Clientsに基づいています。コードベリファイアコードベリファイアは、製品によって生成された、暗号化されたランダムな文字列で、ハッシュ化され(SHA256)、コンパニオンアプリにハンドオフされます。文字列の長さは43~128文字で、URLとファイル名に使用できる文字([A-Z]、[a-z]、[0-9]、「-」、「_」、「.」、「~」)で構成されます。コードベリファイアは機密データのため、絶対に製品外に送信しないでください。チャレンジコードクライアント/製品は、以下のSHA-256を使用してコードベリファイアから抽出したチャレンジコードを作成する必要があります。S256コードベリファイアをSHA256でハッシュ化した値をBase64urlでエンコードしたもの。Clientsの付録Aを参照してください。チャレンジコードメソッドチャレンジコードを抽出するために使用するメソッド。AVSでは、SHA-256を使用する必要があります。リフレッシュトークンおよびアクセストークンの取得手順クリックして拡大コンパニオンアプリは、Alexa搭載製品から以下の値をリクエストします。Amazonボタンを表示します。LWAボタンが押されると、ユーザーはステップ1でリクエストした値とともにAmazonのログインページにリダイレクトされ、Amazon認証情報を入力し承諾するよう求められます。承諾したら、ユーザーは、5分間有効で1回限り使用できるLWA認可コードとともにコンパニオンアプリに再びリダイレクトされます。コンパニオンアプリは、Alexa搭載製品に以下の値を安全に送信します。認可コードクライアントIDリダイレクトURI製品はLWAを呼び出し、リフレッシュトークンとアクセストークンと引き換えに、認可コード、クライアントID、リダイレクトURIおよびコードベリファイアを送信します。LWAは、リフレッシュトークンとアクセストークンを製品に返します。製品は、AVSの呼び出しにアクセストークンを使用します。アクセストークンの有効期限が切れると、LWAから新しいリフレッシュトークンとアクセストークンを取得するのと引き換えに、ステップ5のクライアントIDとリフレッシュトークンを送信します。アクセストークンの有効期限が切れるたびにこのステップを繰り返します。LWAは、新しいリフレッシュトークンとアクセストークンを製品に返します。サンプルコードAndroidとiOSのサンプルコンパニオンアプリは、[サンプルアプリ][avs-pi]の一部として入手できます。コンパニオンアプリの機能例として、また以下の問題が発生した場合は、サンプルコードを確認することをお勧めします。SDKを使用する下のタブを使用して、モバイルのオペレーティングシステムを選択してください。SDKを使用していることを前提としています。SDKを使用してLWA認可コードを製品に渡し、AVSの呼び出しに必要なリフレッシュトークンとアクセストークンを取得して使用できるようにするには、以下の説明に従います。Amazon開発者コンソールで端末を登録し、製品のAPIキーを生成します。アカウントを作成して製品を登録する方法については、AVSスタートガイドを参照してください。Amazonに移動し、ステップ1、4、および5を実行します。次に、以下のステップを実行して、AVSで使用するLWAアクセストークンを取得します。APIをソースファイルにインポートします。APIをインポートするには、以下のimport文をソースファイルに追加します。com.amazon.identity.auth.device.api.workflow.RequestContext;RequestContextを初期化します。RequestContextメンバー変数を宣言し、クラスの新しいインスタンスを作成する必要があります。インスタンスを作成するには、現在のアプリケーションコンテキストをstaticなファクトリーメソッドに渡します。RequestContextは、アクティビティのonCreateメソッド内で初期化することをお勧めします。RequestContext.create(this);}AuthorizeListenerImplを作成します。AuthorizeListener抽象クラスを拡張し、authorize呼び出しの結果を処理します。onSuccess、onError、およびonCancel。onSuccessメソッドに渡されるAuthorizeResultオブジェクトには、認可トークンの取得に必要な値が含まれます。}}AuthorizeListenerImplのインスタンスを作成し、登録します。AuthorizeListenerImplのインスタンスを作成し、RequestContextインスタンスに登録します。AuthorizeManager.authorizeの呼び出しが行われると、RequestContextインスタンスは、authorizeリクエストの結果を使用してAuthorizeListenerで適切なコールバックメソッドを呼び出します。AuthorizeListenerImplインスタンスは、onCreateメソッド内に登録することをお勧めします。AuthorizeListenerImpl());}onResumeメソッドをオーバーライドします。アクティビティ内のonResumeメソッドをオーバーライドします。RequestContextインスタンス上で、onResumeメソッドだけでなく、super.onResume()も呼び出します。これにより、RequestContextに対して、AuthorizeManager.authorize呼び出しからのコールバックの準備ができた場合にアプリが再開されると、AuthorizeListenerを呼び出すよう通知されます。mRequestContext.onResume();}AuthorizeManager.authorizeを呼び出します。AmazonボタンのonClickハンドラーで、authorizeを呼び出し、ユーザーにログインしてアプリケーションを認可するよう求めます。このメソッドは、以下のいずれかの方法でユーザーを認可します。システムブラウザに切り替え、ユーザーにサインインしてリクエストされた情報を承諾するよう求める。セキュアなコンテキストでのウェブ表示に切り替え、ユーザーにサインインしてリクエストされた情報を承諾するよう求める。2つ目に記述されているセキュアなコンテキストは、現在、Android端末上のAmazonショッピングアプリとして利用できます。TV端末など)は、端末上にAmazonショッピングアプリがなくても、常にこのオプションを使用します。このため、ユーザーがすでにAmazonショッピングアプリにサインインしていれば、シングルサインオン機能により、このAPIはサインインページをスキップします。アプリケーションが認可されると、スコープと呼ばれる1つ以上のデータセットに対して認可されます。スコープはOAuthメカニズムの1つで、認可サーバーに、クライアントで何のリソースパーミッションが必要かを知らせます。authorizeメソッドに、パラメーターとしてスコープの配列を渡します。アプリに初めてログインすると、ユーザーに、アクセスする必要のあるデータのリストを含むプロンプトが提示され、続行する前に承諾を求められます。AVSでLWAを使用するときは、alexa:allスコープが必要です。認可の呼び出しは非同期で行われ、呼び出しの結果を使用してAuthorizeListenerImplインスタンスが呼び出されます。});}上のコードでは、以下のオプションを追加しています。製品タイプID(PRODUCT_ID)と製品固有のDSN(PRODUCT_DSN)含む追加のデータで、alexa:allスコープにバインドされています。認可コードを返す必要があることを示す定数。Base64.NO_PADDING、Base64.URL_SAFE、およびBase64.NO_WRAP。チャレンジコードのエンコーディングメソッド(S256)。取得した認可コードは、5分間有効で1回限り使用できます。AuthorizeListenerImplのonSuccessを実装します。AuthorizeResultから、製品に安全に送信する必要のある認可コード、リダイレクトURI、およびクライアントIDを取り出します。AuthorizeListener}製品が認可コード、クライアントID、およびリダイレクトURIを受信したら、製品はLWAを呼び出して、アクセストークンとリフレッシュトークンを取得するために認可コードを送信します。Androidアプリから取得した認可コード。Androidアプリから取得したリダイレクトURI。Androidアプリから取得したクライアントID。製品で最初に生成されたコードベリファイア。応答には、以下の値が含まれます。リフレッシュトークン。アクセストークンの有効期限が切れるまでの秒数。アクセストークンの有効期限が切れたか、間もなく切れるとき、新しいアクセストークンとリフレッシュトークンを取得するためにリフレッシュトークンを交換できます。リフレッシュトークン。Androidアプリから取得したクライアントID。応答には、以下の値が含まれます。リフレッシュトークン。アクセストークンの有効期限が切れるまでの秒数。Amazon認可コードを製品に渡し、AVSの呼び出しに必要なリフレッシュトークンとアクセストークンを取得して使用できるようにするには、以下の説明に従います。Amazon開発者コンソールで端末を登録し、製品のAPIキーを生成します。アカウントを作成して製品を登録する方法については、AVSスタートガイドを参照してください。Amazonに移動し、ステップ1、4、および5を実行します。Amazonアクセストークンを取得します。APIをソースファイルにインポートします。APIをインポートするには、以下の#import文をソースファイルに追加します。<LoginWithAmazon/LoginWithAmazon.h>onLoginButtonClickedでauthorize:withHandler:を呼び出します。Amazonボタンにリンクする必要があります。このメソッド内で、authorize:withHandler:を呼び出し、ユーザーにログインしてアプリケーションを認可するプロンプトを提示します。このメソッドを使うと、ユーザーは、以下のいずれかの方法でサインインし、リクエストされた情報を承諾することができます。8以下)1つ目に記述されているセキュアなコンテキストは、端末にAmazonショッピングアプリがインストールされているときに利用できます。ユーザーがすでにAmazonショッピングアプリにサインインしていれば、シングルサインオン(SSO)機能により、このAPIはサインインページをスキップします。authorize:withHandler:への最初のパラメーターは、アプリケーションがどのスコープの認可をリクエストしているかを示すAMZNAuthorizeRequestオブジェクトです。Amazonからリクエストしているユーザーデータの範囲です。アプリに最初にログインすると、ユーザーに対してリクエストしているデータのリストが提示され、承認を求められます。authorize:withHandler:への2つ目のパラメーターは、AMZNAuthorizationRequestHandlerで、これについては次のステップで説明します(コードのサンプルについては、ステップ3を参照してください)。AMZNAuthorizationRequestHandlerブロックオブジェクトを作成します。authorize:withHandler:呼び出しの結果を処理します。objective-cブロックの詳細については、developer.apple.comでブロックの使用を参照してください。AMZNAuthorizationRequestHandlerの最初のパラメーターはAMZNAuthorizeResultオブジェクトです。ユーザーが正常に認可されたら、AMZNAuthorizeResultには、ユーザーのプロファイルデータにアクセスするために使用できるアクセストークンと、ユーザーのプロファイルデータを含むAMZNUserオブジェクトが含まれます。AMZNAuthorizationRequestHandlerの2つ目のパラメーターは、userDidCancelと呼ばれるブール値です。このパラメーターには、ユーザーが以下を実行した場合にtrueがセットされます。9以上)Amazonショッピングアプリ内でウェブ表示を閉じた場合ログインをキャンセルし、認可を拒否した場合AMZNAuthorizationRequestHandlerの3つ目のパラメーターは、SDKまたは認可サーバーが原因でログインと認可が失敗した場合のエラーの詳細を含むNSErrorオブジェクトです。}];}製品に、認可コード、クライアントID、およびリダイレクトURIを安全に送信します。製品が認可コード、クライアントID、およびリダイレクトURIを受信したら、製品はLWAを呼び出して、アクセストークンとリフレッシュトークンを取得するために認可コードを送信します。iOSアプリから取得した認可コード。iOSアプリから取得したリダイレクトURI。iOSアプリから取得したクライアントID。製品で最初に生成されたコードベリファイア。応答には、以下の値が含まれます。リフレッシュトークン。アクセストークンの有効期限が切れるまでの秒数。アクセストークンの有効期限が切れたか、間もなく切れるとき、新しいアクセストークンとリフレッシュトークンを取得するためにリフレッシュトークンを交換できます。リフレッシュトークン。iOSアプリから取得したクライアントID。応答には、以下の値が含まれます。リフレッシュトークン。アクセストークンの有効期限が切れるまでの秒数。