Smart Lock for Passwords を使用するアプリがユーザー データベースをウェブサイトと共有している場合、またはアプリとウェブサイトが Google ログインなどのフェデレーション ログイン プロバイダを使用している場合は、アプリをウェブサイトに関連付けることで、ユーザーが認証情報を一度保存すると、アプリとウェブサイトの両方に自動的にログインできます。
アプリをウェブサイトに関連付けるには、ウェブサイトでデジタル アセット リンク JSON ファイルをホストし、デジタル アセット リンク ファイルへのリンクをアプリのマニフェストに追加することで、関連付けを宣言します。
また、ウェブサイトでデジタル アセット リンクの申告をホストすると、Android 8.0 以降を実行しているアプリで自動入力データをアプリと共有できるようになります。
Prerequisites
ウェブサイトのログイン ドメインが HTTPS でアクセスできる必要があります。
アプリをウェブサイトに関連付ける
デジタル アセット リンクの 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 にパス(末尾のスラッシュなど)を含めないでください。サブドメインは一致とは見なされません。つまり、domain を
www.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
コマンドを使用します。詳しくは、デジタル アセット リンクのリファレンスをご覧ください。
デジタル アセット リンクの 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
ヘッダーを送信していることを確認します。ホストが Google にデジタル アセット リンク ファイルの取得を許可していることを確認します。
robots.txt
ファイルがある場合は、Googlebot エージェントに/.well-known/assetlinks.json
の取得を許可する必要があります。ほとんどのサイトでは、自動エージェントに/.well-known/
パス内のファイルの取得を許可するだけで、他のサービスがこれらのファイルのメタデータにアクセスできるようになります。User-agent: * Allow: /.well-known/
Android アプリで関連付けを宣言します。
<application>
のマニフェスト ファイルに次の行を追加します。<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
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
Google Play ストアにアプリを公開します。関連付けを取得するには、公開チャンネルでリリースする必要があります。
(省略可) 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"
]
}
}]
次に、両方のアプリで関連付けを宣言します。
<application>
のマニフェスト ファイルに次の行を追加します。<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
strings.xml
ファイルに次の文字列リソースを追加します。<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>
例: アプリを複数のウェブサイトに関連付ける
アプリを複数のウェブサイトに関連付けるには、Digital Assets Link ファイルで各ウェブサイトを指定し、各ウェブサイトでファイルをホストします。たとえば、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"
}]
最後に、両方のアプリで関連付けを宣言します。
<application>
のマニフェスト ファイルに次の行を追加します。<meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
strings.xml
ファイルに次の文字列リソースを追加します。<string name="asset_statements" translatable="false"> [{ \"include\": \"https://signin.example.com/.well-known/assetlinks.json\" }] </string>