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

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

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

また、デジタル アセット リンクの申告をウェブサイトでホストすると、Android 8.0 以降で実行されているアプリの自動入力データをウェブサイトで共有できるようになります。

前提条件

ウェブサイトのログイン ドメインが 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

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

    domain は完全修飾する必要があります。HTTPS にポート 443 を使用する場合は、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 は、フォームで送信されたアフィリエイト関係が実際に機能するかどうかを定期的に確認し、問題がある場合はご連絡することがあります。

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

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

Digital Assets Link ファイルで各アプリを指定することで、複数のアプリをウェブサイトに関連付けることができます。たとえば、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>