アプリ間アカウントリンク(Alexaアプリから開始する場合)



アプリ間アカウントリンク(Alexaアプリから開始する場合)

このアカウントリンクフローを使用すると、ユーザーはAlexaアプリから、AlexaユーザーIDと別のサービスでのIDをリンクできるようになります。ユーザーがモバイルデバイスでアプリとAlexaアプリの両方にログインしている場合、どちらのアプリにもアカウント認証情報を入力せずにアカウントをリンクできます。

次の方法でも、アカウントリンクフローを実装することができます。

  • アプリからアプリ間アカウントリンクを開始 - ユーザーは、Alexaアプリではなく、アプリまたはウェブサイトからアカウントをリンクします。詳細については、アプリ間アカウントリンク(アプリから開始する場合)を参照してください。
  • Alexaアプリのみ(ブラウザのフロー) - Alexaアプリの中だけでアカウントリンクのユーザー操作が完結します。これは最も一般的なフローです。詳細については、アカウントリンクフローを選択するを参照してください。

アプリやウェブサイトをお持ちで、ユーザーに再度ログインを求めることなく、ユーザーのAuthorizaion Grantを取得できる場合は、Alexaアプリのみのフローに加えて、いずれかのアプリ間アカウントリンクフローの実装をお勧めします。

これ以降に出現するアプリ間アカウントリンクという用語は、Alexaアプリから開始されたアプリ間アカウントリンクを指します。

用語

このトピックでは、以下の用語を使用します。

  • サービス - 開発者が提供するサービスです。たとえば、ユーザーがタクシーを手配できる、ウェブベースの「タクシー予約」サービスなどがあります。
  • アプリ - ユーザーがサービスの操作に使用するアプリです。先ほどの例であれば、「タクシー予約」アプリなどです。ここでは、読者がアプリの開発者だと想定します。
  • スキル - ユーザーがAlexaでサービスを操作するために使用するAlexaスキルです。ここでは、読者がスキルの開発者だと想定します。
  • Alexaアプリ - ユーザーがモバイルデバイスにダウンロードして使用できるAmazon Alexaアプリです。
  • OAuth 2.0 - ユーザーが以前に設定したアカウントから、ユーザーの権限を使ってAlexaが情報にアクセスできるようにする認証の標準です。OAuth 2.0標準については、OAuth 2.0を参照してください。
  • アプリリンク - ユーザーがアプリを起動するためにクリックするAndroidのディープリンクです。アプリリンクの詳細については、Androidのドキュメントを参照してください。
  • ユニバーサルリンク - ユーザーがアプリを起動するためにクリックするiOSのディープリンクです。ユニバーサルリンクの詳細については、iOSのドキュメントを参照してください。

ユーザーの操作

ユーザーは以下のワークフローに従って、アプリ間アカウントリンクを有効にします。

  • ユーザーは、スキルを有効にするか、スキルの詳細ページでアカウントをリンクオプションをクリックして、Alexaアプリ内からプロセスを開始します。ユーザーがアカウントリンクプロセスを開始すると、モバイルデバイスにアプリがインストールされているかどうかによって、以下のいずれかのフローが適用されます。
  • (アプリのフロー)モバイルデバイスにアプリがインストールされている場合は、デバイスがアプリを起動し、ユーザーに対してアカウントリンクリクエストへの同意を求めます。ユーザーがリクエストに同意すると、デバイスはユーザーをAlexaアプリにリダイレクトします。
  • (ブラウザのフロー)デバイスにアプリをインストールしていない場合のフローは、Alexaアプリのみのアカウントリンクフローと同じです。つまり、ユーザーのブラウザが認証ページを開き、ユーザーにアカウントリンクリクエストへの同意を求めます。ユーザーがリクエストに同意すると、認証ウェブサイトはユーザーをAlexaアプリにリダイレクトします。

アカウントをリンクした後、ユーザーがスキルを使用するワークフローは、Alexaアプリのみのアカウントリンクと同じです。いずれの場合も、スキルを無効にすると、アカウントリンクが解除されます。

アプリがインストールされている場合

以下の例は、アプリがインストールされている場合のフローです。

Alexaアプリ間アカウントリンク

アプリがインストールされていない場合

以下の例は、アプリがインストールされていない場合のフローです。このフローは、Alexaアプリのみのフロー(ブラウザのフロー)と同じです。

Alexaアカウントリンク(ブラウザのフロー)

実装するフローの選択

実装するアプリ間アカウントリンクフローは、ユーザーがモバイルデバイスにアプリをインストールしているかどうかによって異なります。ユーザーがデバイスにアプリをインストールしている場合は、アプリのフローをメインのフローとして実装し、ブラウザのフローをアプリがインストールされていない場合の対応として実装します。ユーザーがモバイルデバイスにアプリをインストールしないと想定する場合は、ブラウザのフローを実装します。

しくみ

アプリ間アカウントリンクはOAuth 2.0に基づいて機能します。処理の流れは以下のとおりです。

  1. ユーザーはAlexaアプリをインストールしてログインします。
  2. ユーザーは、以下のいずれかを実行して、Alexaアプリでアカウントリンクプロセスを開始します。
    1. スキルの詳細ページで有効にするをタップします。
    2. ユーザーが以前にスキルを有効にしていた場合は、スキルの設定ページでアカウントをリンクをタップします。
    3. Alexaアプリでユーザーがスキルを操作したときに表示されるアカウントリンクカードでアカウントをリンクをタップします。
  3. 次のステップは、ユーザーのデバイスにアプリがインストールされているかどうかによって、以下の2つに分かれます。
    • アプリがインストールされている場合:
      1. Alexaアプリは、認可リクエストに必要なパラメーターとともに、アプリのユニバーサルリンク(iOS)またはアプリリンク(Android)を使用して、ユーザーをアプリにリダイレクトします。
      2. アプリは同意画面を表示し、アカウントリンクのリクエストに同意するか拒否するかをユーザーに確認します。
      3. ユーザーがリクエストに同意します。
      4. (オプション)アプリはユーザーから、優先するストアの場所などの追加情報を取得します。
      5. アプリは認可応答を使用して、ユーザーをAlexaアプリにリダイレクトします。
    • アプリがインストールされていない場合: これは、アカウントリンクフローを選択するで説明されている、Alexaアプリのみのアカウントリンクフローです。
  4. Alexaアプリは、前のステップの認可応答をAlexaサービスに送信し、アカウントのリンクを終了します。Alexaサービスでは、スキルがImplicit grantとAuthorization code grantのどちらを使用するかに応じて、以下のプロセスを使用します。
    • Implicit grant(カスタムスキルのみ): Alexaサービスは、前のステップで提供されたアクセストークンを保存します。
    • Authorization code grant: Alexaサービスはトークンサーバーを呼び出して、前のステップの認可コードをアクセストークンと更新トークンのペアと交換し、このトークンのペアを保存します。
  5. アカウントリンクプロセスが完了します。

アプリへの認可リクエストのパラメーター

このセクションでは、指定したユニバーサルリンク(iOS)またはアプリリンク(Android)を使用してAlexaサービスがアプリに対して実行する認可リクエストのパラメーターについて説明します。

フィールド 説明

client_id

スキルのIDです。このIDを使って、アカウントリンクを使うよう設定した他のスキルと区別するなど、スキル固有の機能を提供できます。client_idは、スキルのアカウントリンクを設定する際に定義します。

authorizationUrlsByPlatform

アプリ間アカウントリンクのためにAlexaサービスがアプリを開く際に使用するURLです。Alexaサービスが使用するURLは、ユーザーのデバイスの種類によって、 アプリリンク(Android)またはユニバーサルリンク(iOS)のいずれかになります。

redirect_uri

アプリが認可応答を使用してユーザーをリダイレクトするAlexaアプリのURIです。このリダイレクトURIは、Alexaアプリのみのアカウントリンクフローで使用されるredirect_uriと同じです。これらのURIを認可サーバーでホワイトリストに登録する必要があります。これらのURIは、ユニバーサルリンク/アプリリンクに対応しています。

Authorization code grant種別の場合、リダイレクトURIの値は、https://pitangui.amazon.com/api/skill/link/{開発者のAmazonベンダーID}https://layla.amazon.com/api/skill/link/{開発者のAmazonベンダーID}https://alexa.amazon.co.jp/api/skill/link/{開発者のAmazonベンダーID}のいずれかです。

Implicit grant種別の場合、リダイレクトURIの値は、https://pitangui.amazon.com/spa/skill/account-linking-status.html?vendorId={開発者のAmazonベンダーID}https://layla.amazon.com/spa/skill/account-linking-status.html?vendorId={開発者のAmazonベンダーID}https://alexa.amazon.co.jp/spa/skill/account-linking-status.html?vendorId={開発者のAmazonベンダーID}のいずれかです。

詳細については、Alexaのリダイレクト先のURLを参照してください。

scope

Alexaユーザーが必要とするアクセスを表すスコープのリスト(任意)です。これらのスコープは、スキルのアカウントリンクを設定する際に定義します。

  • サービスはアクセストークンを生成するときにこの情報を使用します。たとえば、基本のプロフィール情報にはアクセスできるが、支払い情報にはアクセスできないトークンを作成できます。
  • 複数のスコープを使用できます。スコープのリストは、URLエンコードされたスペースで区切ります。
  • ログインページでは、アカウントリンクによってどのようなアクセスが付与されるかをユーザーに伝える必要があります。

response_type

サービスがユーザーを認証した後にリクエストが返す応答のタイプです。Authorization code grant種別の場合はcodeに、Implicit grant種別の場合はtokenに設定します。

state

アカウントリンクを使用してユーザーをトラッキングするために、Alexaサービスが使用する値です。

Alexaアプリは、認証URIを使用して認可サーバーにstate値を送信します。認可サーバーは、その特定のアカウントリンクリクエストのリダイレクトURIを呼び出すときに、同じstate値を使用する必要があります。認可サーバーへの各リクエストには、独自のstate値があります。

主な手順

このセクションでは、主な手順を説明し、以下のライブラリと言語を使用したiOSアプリ(10.0以降)およびAndroidアプリのコード例を紹介します。

以下の図では、主な手順を示します。図に続いて手順を説明し、コード例を示します。

Alexaアプリ間アカウントリンクの手順

クリックすると、各ステップにジャンプします。 1  2  3  4  5

ステップ1: アプリのユニバーサルリンク(iOS)またはアプリリンク(Android)を有効にする

Alexaアプリでアプリに認可をリクエストできるようにするには、ユニバーサルリンク(iOS)またはアプリリンク(Android)を有効にする必要があります。

ステップ2: スキルでアカウントリンク用のコンフィギュレーションを行う

開発者コンソールAlexa Skills Kitコマンドラインインターフェース(ASK CLI)、またはAlexaスキル管理API(SMAPI)を使用してスキルのコンフィギュレーションを行います。このコンフィギュレーションでは、アプリの認証画面のURL(ディープリンク有効)、アクセストークンのURLなどを指定します。

アカウントリンクのコンフィギュレーションの詳細については、Authorization code grantを設定するおよびImplicit grantを設定するを参照してください。

ステップ3: アプリで認可リクエストを処理する

AlexaサービスがauthorizationUrlsByPlatformを使用してアプリのユニバーサルリンクまたはアプリリンクを呼び出す場合、アプリはユーザーに同意画面を表示し、アカウントへのリンクの認可を取得する必要があります。

ステップ4: ユーザーをAlexaアプリにリダイレクトする

ユーザーがアプリでアカウントリンクリクエストに同意したら、ユーザーをAlexaアプリにリダイレクトしてアカウントリンクプロセスを終了します。

ステップ5: スキルでアクセストークンを使用する

ユーザーがスキルを有効にしてAlexaをサービスにリンクすると、スキルに送信されるリクエストにユーザーのアクセストークンが含まれるようになります。スキルコードは、リクエストからアクセストークンを取得して検証し、それを使ってリソースサーバーから必要なユーザー情報を取得する必要があります。

ベストプラクティス

アプリ間アカウントリンクの実装時には、次の点に留意してください。

  • ユーザーインターフェース - アプリのユーザーインターフェースは、Amazon EchoおよびAlexaブランド使用ガイドラインに従ってデザインします。
  • セキュリティ - ユーザーのリクエストが金融取引や個人情報が関係する処理の場合、リクエストを実行する前に、事前に設定されたセキュリティの質問に答えるようにユーザーに求めます。
  • 応答URIの生成 - 認可応答またはアクセストークン応答を使用してユーザーをAlexaアプリにリダイレクトするコードでは、応答URIをバックエンドで作成することを強くお勧めします。これにより、アプリを再ビルドせずにパラメーターや検証ロジックをすぐに変更できます。
  • アプリでアプリ間アカウントリンクを有効にする - スキルの新しいバージョンを公開する前に、アプリがユニバーサルリンク(iOS)またはアプリリンク(Android)を処理して認証ページを開けることを確認してください。

テストのガイドライン

すべてのスキルに適用される認定の要件にスキルが適合していることを確認することに加え、アプリ間アカウントリンクの実装をテストします。最初に、モバイルデバイスにアプリとAlexaアプリの両方をインストールし、両方のアプリにサインインしていることを確認します。次に、Alexaアプリでスキルを有効にし、以下を確認します。

  • スキルを有効にしたときに、ユーザーにアカウントリンクの続行を確認するランディングページをアプリが表示します。
  • アプリ内のリンクを選択した後、ユーザーはAlexaアプリにリダイレクトされ、リンクが完了したことを確認する必要があります。
  • スキルと対話して、スキルが正しくリンクされていることを確認します。

iOSとAndroidの両方にアプリ間アカウントリンクを実装した場合は、それぞれのエクスペリエンス全体を個別にテストしてください。

よくある質問

以下は、アプリ間アカウントリンクについてのよくある質問です。

質問: アカウントリンクリクエストを処理できるアプリが複数あります。アプリ間アカウントリンクフローを設定するにはどうすればよいですか?

この場合は、認証URIで複数のアプリを開くことができる必要があります。ユニバーサルリンクとアプリリンクは、この機能を次のようにサポートしています。

  • iOS - アカウントリンクリクエストを処理するすべてのアプリのentitlementsファイルに、認証URIのドメインを追加できます。ドメインのapple-app-site-associationファイルで、アプリごとに異なるエントリを追加できます。ユーザーが複数のアプリをインストールしている場合、apple-app-site-associationファイルでの表示順序で優先度の順位が決まります。

  • Android - アカウントリンクリクエストを処理するすべてのアプリのアプリマニフェストに、認証URIのドメインを追加できます。ドメインのAsset Links JSONで、アプリごとに異なるエントリを追加できます。ユーザーが複数のアプリをインストールしている場合、アプリマニフェストのインテントフィルタのpriority属性で優先度の順位が決まります。

質問: 複数のスキルを持っている場合、同じアプリを使用することはできますか?

はい。次のいずれかの方法で対応できます。

  • 所有するすべてのスキルに同じ認証URIを使用します。
  • スキルごとに個別の認証URIを設定し、アプリを開くスキルごとにユニバーサルリンクまたはアプリリンクを有効にします。
質問: ユーザーがアプリで現在ログインしているアカウントとは別のユーザーアカウントをAlexaとリンクさせたい場合、どうすればいいですか?

ユーザーがログインしているアカウントとは異なるアカウントをAlexaにリンクすることが予想される場合は、ユーザーがアプリでアカウントリンクのリクエストを受け取ったときに、ログアウトして別のアカウントを選択できるようにすることで対応できます。

質問: サードパーティの認可サーバーを使用しています。アプリ間アカウントリンクを実装できますか?

はい。ただし、ユーザーが再度ログインしなくても済むのは、認可サーバーがセッション識別子を使用して認可コードまたはアクセストークンを生成するAPIを公開している場合のみです。

質問: ユーザーはアカウントをリンクした後にデバイスの検出を実行できますか?

はい。アカウントをリンクした後のユーザーエクスペリエンスは、Alexaアプリのみのフローと同じです。

質問: ユーザーは権限の付与に同意できますか?

はい。ユーザーは、アカウントをリンクする前に、引き続きスキル権限を付与できます。

質問: スキルのパーソナライズで動作するようにスキルを設定しています。ユーザーは個人アカウントをリンクできますか?

はい。アプリ間アカウントリンクフローは、個人アカウントのリンクをサポートしています。

質問: ユーザーのAlexaアプリがアプリ間アカウントリンクフローをサポートしているかどうかを確認するにはどうすればよいですか?

Alexaアプリは、アプリ間アカウントリンクフローを完了できるAlexaアプリを持っている場合にのみ、アプリへのリクエストを開始します。

質問: ユーザーがアカウントリンクを取り消すにはどうすればよいですか?

スキルを無効にすると、ユーザーのアカウントのリンクが解除されます。スキルを無効にするには、「アレクサ、<スキル名>を無効にして」と話しかけるか、スキルの詳細ページからスキルを削除します。

質問: Alexaイベントを送信するようにスキルを設定しました。Alexaイベントはアプリ間フローでどのように機能しますか?

スキルのAlexaイベントを送る権限を有効にしている場合、Lambda関数はAcceptGrantディレクティブを処理する必要があります。スキルがこのディレクティブを処理しない場合、ユーザーがスキルを有効にしようとするとアカウントリンクは失敗します。詳細については、アクセス権限を設定してAlexaへのユーザー認証を実現するを参照してください。