アプリとウェブサイト間の自動ログインを有効にする

Smart Lock for Passwords を使用するアプリがウェブサイトとユーザー データベースを共有している場合、またはアプリとウェブサイトで Google ログインなどのフェデレーション ログイン プロバイダを使用している場合は、アプリをウェブサイトに関連付けることで、ユーザーが認証情報を保存すれば、アプリとウェブサイトの両方に自動的にログインできます。

アプリをウェブサイトに関連付けるには、ウェブサイトでデジタル アセット リンクの JSON ファイルをホストし、アプリのマニフェストにデジタル アセット リンクのファイルへのリンクを追加して、関連付けを宣言します。

ウェブサイトでデジタル アセット リンクの宣言をホストすると、Android 8.0 以降で、ウェブサイトが自動入力データをアプリと共有できるようになります。

Prerequisites

ウェブサイトのログイン ドメインは、HTTPS 経由で使用できる必要があります。

アプリをウェブサイトに関連付ける

  1. デジタル アセット リンクの JSON ファイルを作成します。

    たとえば、ウェブサイト https://signin.example.com と、パッケージ名 com.example の Android アプリでログイン認証情報を共有できることを宣言するには、次の内容を含むファイルを assetlinks.json という名前で作成します。

    [{
      "relation": ["delegate_permission/common.get_login_creds"],
      "target": {
        "namespace": "web",
        "site": "https://signin.example.com"
      }
     },
     {
      "relation": ["delegate_permission/common.get_login_creds"],
      "target": {
        "namespace": "android_app",
        "package_name": "com.example",
        "sha256_cert_fingerprints": [
          "F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
        ]
      }
     }]
    

    relation フィールドは、宣言されている関係を説明する 1 つ以上の文字列の配列です。アプリとサイトがログイン認証情報を共有することを宣言するには、文字列 delegate_permission/common.get_login_creds を指定します。

    target フィールドは、宣言が適用されるアセットを指定するオブジェクトです。以下のフィールドでウェブサイトを識別します。

    namespace web
    site

    ウェブサイトの URL。形式は https://domain[:optional_port] です(例: https://www.example.com)。

    HTTPS にポート 443 を使用する場合は、domain を完全修飾名で指定し、optional_port を省略する必要があります。

    site ターゲットはルートドメインにのみできます。アプリの関連付けを特定のサブディレクトリに制限することはできません。URL の末尾にスラッシュ(末尾)などのパスを含めないでください。

    サブドメインは一致と見なされません。つまり、domainwww.example.com として指定した場合、ドメイン www.counter.example.com はアプリに関連付けられません。

    次のフィールドで Android アプリを識別します。

    namespace android_app
    package_name アプリのマニフェストで宣言されているパッケージ名です。例: com.example.android
    sha256_cert_fingerprints アプリの署名証明書の SHA256 フィンガープリント。指紋を生成するには、
    $ keytool -list -v -keystore my-release-key.keystore
    コマンドを使用します。

    詳しくは、デジタル アセット リンクのリファレンスをご覧ください。

  2. ログイン ドメインの次の場所にデジタル アセット リンクの JSON ファイルをホストする:

    https://domain[:optional_port]/.well-known/assetlinks.json

    たとえば、ログイン ドメインが signin.example.com の場合、JSON ファイルを https://signin.example.com/.well-known/assetlinks.json でホストします。

    デジタル アセット リンクファイルの MIME タイプは JSON にする必要があります。サーバーがレスポンスで Content-Type: application/json ヘッダーを送信していることを確認します。

  3. ホストから Google にデジタル アセット リンク ファイルの取得が許可されていることを確認してください。robots.txt ファイルを使用する場合は、Googlebot エージェントが /.well-known/assetlinks.json を取得できるようにする必要があります。ほとんどのサイトでは、自動エージェントが /.well-known/ パスのファイルを取得できるようにすることで、他のサービスがファイル内のメタデータにアクセスできるようにします。

    User-agent: *
    Allow: /.well-known/
    

  4. Android アプリで関連付けを宣言します。

    1. <application> のマニフェスト ファイルに次の行を追加します。

        <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
      
    2. asset_statements 文字列リソースを strings.xml ファイルに追加します。asset_statements 文字列は、読み込む assetlinks.json ファイルを指定する JSON オブジェクトです。文字列で使用するアポストロフィや引用符はエスケープする必要があります。例:

        <string name="asset_statements" translatable="false">
        [{
          \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
        }]
        </string>
      
        > GET /.well-known/assetlinks.json HTTP/1.1
        > User-Agent: curl/7.35.0
        > Host: signin.example.com
      
        < HTTP/1.1 200 OK
        < Content-Type: application/json
      
  5. アプリを Google Play ストアに公開します。関連付けを取得するには、公開チャンネルでリリースする必要があります。

  6. (省略可)Smart Lock for Passwords アフィリエーション フォームに必要事項を入力して送信し、手続きが完了したことを示します。Google は、このフォームを通じて送信された関係が実際に機能するかどうかを確認し、問題が発生した場合は問い合わせを行います。

検証が完了すると、アプリのユーザーはアプリまたはウェブサイトのいずれかに認証情報を保存し、自動的に両方にログインできます。

例: 複数のアプリをウェブサイトに関連付ける

複数のアプリをウェブサイトに関連付けるには、デジタル アセット リンク ファイルで各アプリを指定します。たとえば、com.example アプリと com.example.pro アプリを https://signin.example.com/ のサイトに関連付けるには、https://signin.example.com/.well-known/assetlinks.json でホストされている JSON ファイルで両方のアプリを指定します。

[{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "web",
    "site": "https://signin.example.com"
  }
},{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
    ]
  }
},{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.pro",
    "sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
    ]
  }
}]

次に、両方のアプリで関連付けを宣言します。

  1. <application> のマニフェスト ファイルに次の行を追加します。

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 次の文字列リソースを strings.xml ファイルに追加します。

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>
    

例: アプリを複数のウェブサイトに関連付ける

デジタル アセット リンク ファイルで各ウェブサイトを指定し、各ウェブサイトでファイルをホストすることで、アプリを複数のウェブサイトに関連付けることができます。たとえば、com.example アプリと com.example.pro アプリを https://signin.example.com/https://m.example.com/ のサイトに関連付けるには、https://signin.example.com/.well-known/assetlinks.json でホストされている JSON ファイルで、アプリと両方のサイトを指定します。

[{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "web",
    "site": "https://signin.example.com"
  }
},{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "web",
    "site": "https://m.example.com"
  },
},{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
    ]
  }
},{
  "relation": ["delegate_permission/common.get_login_creds"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.pro",
    "sha256_cert_fingerprints": [
"F2:52:4D:82:E7:1E:68:AF:8C:BC:EA:B0:A2:83:C8:FE:82:51:CF:63:09:6A:4C:64:AE:F4:43:27:20:40:D2:4B"
    ]
  }
}]

次に、https://m.example.com/.well-known/assetlinks.json でホストされている JSON ファイルに、主要なデジタル アセット リンク ファイルを含めます。

[{
  "include": "https://signin.example.com/.well-known/assetlinks.json"
}]

最後に、両方のアプリで関連付けを宣言します。

  1. <application> のマニフェスト ファイルに次の行を追加します。

    <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
    
  2. 次の文字列リソースを strings.xml ファイルに追加します。

    <string name="asset_statements" translatable="false">
    [{
      \"include\": \"https://signin.example.com/.well-known/assetlinks.json\"
    }]
    </string>