Smart Lock for Passwordsを使用するアプリがユーザーデータベースをウェブサイトと共有している場合、またはアプリとウェブサイトがGoogleサインインなどのフェデレーションサインインプロバイダーを使用している場合は、アプリをウェブサイトに関連付けて、ユーザーが資格情報を保存できるようにすることができます一度、アプリとウェブサイトの両方に自動的にサインインします。
アプリをウェブサイトに関連付けるには、ウェブサイトでデジタルアセットリンクJSONファイルをホストし、アプリのマニフェストにデジタルアセットリンクファイルへのリンクを追加して、関連付けを宣言します。
ウェブサイトでデジタルアセットリンク宣言をホストすることで、Android 8.0以降で実行しているときに、ウェブサイトがアプリと自動入力データを共有できるようになります。
前提条件
Webサイトのサインインドメインは、HTTPSを介して利用できる必要があります。
アプリをウェブサイトに関連付ける
Digital Asset LinksJSONファイルを作成します。
たとえば、ウェブサイト
https://signin.example.com
とパッケージ名com.example
Androidアプリがサインイン資格情報を共有できることをassetlinks.json
は、次の内容の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
フィールドは、宣言が適用されるアセットを指定するオブジェクトです。次のフィールドはWebサイトを識別します。namespace
web
site
https:// domain [: optional_port ]
;の形式のWebサイトのURLたとえば、https://www.example.com
です。domainは完全修飾されている必要があります。HTTPSにポート443を使用するoptional_portは、 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
詳細については、 Digital AssetLinksリファレンスを参照してください。
サインインドメインの次の場所でDigitalAssets LinkJSONファイルをホストします:
https://domain[:optional_port]/.well-known/assetlinks.json
たとえば、サインインドメインが
signin.example.com
場合、JSONファイルをhttps://signin.example.com/.well-known/assetlinks.json
でホストしhttps://signin.example.com/.well-known/assetlinks.json
。Digital AssetsLinkファイルの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
アプリをGooglePlayストアに公開します。アソシエーションをピックアップするには、パブリックチャネルでリリースする必要があります。
(オプション) Smart Lock for Passwordsアフィリエーションフォームに記入して送信し、プロセスを完了したことを示します。 Googleは、フォームから送信されたアフィリエーションが実際に機能するかどうかを定期的にチェックし、問題が発生した場合に連絡する場合があります。
確認が完了すると、アプリのユーザーはアプリまたはウェブサイトのいずれかに自分の資格情報を保存し、両方に自動的にサインインできます。
例:複数のアプリをウェブサイトに関連付ける
Digital Assets Linkファイルで各アプリを指定することにより、複数のアプリをWebサイトに関連付けることができます。例えば、関連付けるためcom.example
とcom.example.pro
でサイトとアプリケーションをhttps://signin.example.com/
JSONファイルに両方のアプリを指定し、でホストhttps://signin.example.com/.well-known/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": ["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ファイルで各Webサイトを指定し、各Webサイトでファイルをホストすることにより、アプリを複数のWebサイトに関連付けることができます。例えば、関連付けるため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ファイルに、プライマリDigital AssetLinksファイルを含めます。
[{
"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>