如果使用Smart Lock for Passwords的應用程序與您的網站共享用戶數據庫,或者如果您的應用程序和網站使用聯合登錄提供商(例如Google Sign-In),則可以將該應用程序與網站相關聯,以便用戶保存其憑據一次,然後自動登錄該應用程序和網站。
要將應用程序與網站關聯,請通過在網站上託管Digital Asset Links JSON文件並在應用程序清單中添加指向Digital Asset Link文件的鏈接來聲明關聯。
通過在網站上託管數字資產鏈接聲明,您還可以使網站在Android 8.0及更高版本上運行時,可以與您的應用共享自動填充數據。
先決條件
您網站的登錄域必須通過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
字段是一個或多個字符串的數組,這些字符串描述要聲明的關係。要聲明應用程序和網站共享登錄憑據,請指定字符串delegate_permission/common.get_login_creds
。target
字段是一個對象,用於指定聲明所適用的資產。以下字段標識網站:namespace
web
site
網站的URL,格式為
https:// domain [: optional_port ]
;例如https://www.example.com
。該domain必須是完全合格的。使用端口443進行HTTPS時,必須省略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 Assets Link 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檢索您的Digital Asset Link文件。如果您有
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
字符串是一個JSON對象,用於指定要加載的assetlinks.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商店。需要在公共渠道中發布它,以獲取協會。
(可選)填寫並提交“ 智能密碼鎖”從屬關係表,以表明您已完成此過程。 Google會定期檢查通過表單提交的從屬關係是否有效,如果出現問題,可能會與您聯繫。
驗證完成後,您的應用程序用戶可以將其憑據保存在您的應用程序或網站上,並自動登錄到兩者。
示例:將多個應用程序與一個網站相關聯
您可以通過在Digital Assets Link文件中指定每個應用程序來將多個應用程序與一個網站相關聯。例如,要將com.example
和com.example.pro
應用程序與位於https://signin.example.com/
的網站相關聯, https://signin.example.com/
在https://signin.example.com/.well-known/assetlinks.json
託管的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文件中指定每個網站並將文件託管在每個網站上來將應用程序與多個網站關聯。例如,要將com.example
和com.example.pro
應用程序與位於https://signin.example.com/
和https://m.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>