啟用跨應用程式和網站的自動登入功能

如果您的應用程式使用密碼專用 Smart Lock,會與您的 Google 帳戶共用使用者資料庫 您的網站和網站採用聯合登入供應商 做為 Google 登入的 - 您可以將應用程式與網站建立關聯,讓 使用者儲存憑證一次,然後自動登入 應用程式和網站

如要將應用程式與網站建立關聯,請代管 網站上的 Digital Asset Links JSON 檔案,以及 在應用程式的資訊清單中加入 Digital Asset Link 檔案的連結。

在網站上代管 Digital Asset Links 宣告,等同於 共用自動填入功能的網站 我們會使用您的應用程式資料。

必要條件

網站的登入網域必須可透過 HTTPS 存取。

為應用程式和網站建立關聯

  1. 建立 Digital Asset Links 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

    網站網址,格式為 https://domain[:optional_port];的 例如:https://www.example.com

    domain 必須完整。 使用通訊埠 443 時,必須省略 optional_port HTTPS

    site 指定目標只能是根網域:您無法限制應用程式與特定子目錄建立關聯。請勿在 網址中的路徑

    系統不會將子網域視為相符項目:也就是說,如果將 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 Asset Links 參考資料

  2. 請在以下位置代管 Digital Assets Link JSON 檔案: 登入網域:

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

    舉例來說,如果您的登入網域為 signin.example.com,請在 https://signin.example.com/.well-known/assetlinks.json 上代管 JSON 檔案。

    Digital Assets Link 檔案的 MIME 類型必須為 JSON。確認伺服器會在回應中傳送 Content-Type: application/json 標頭。

  3. 確保主機允許 Google 擷取您的 Digital Asset Link 檔案。如果您有 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. strings.xml 檔案中加入 asset_statements 字串資源。 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
      
  5. 將應用程式發布到 Google Play 商店。必須對外公開 並透過頻道擷取關聯。

  6. (選用) 填寫並提交 密碼專用 Smart Lock 關聯表單:表示您已參加 整個流程Google 會定期檢查聯盟關係 確實有效,如果 如要解決關聯問題,可用 Apriori 這類關聯規則學習技術和演算法

完成驗證後,應用程式使用者就能將自己的憑證儲存至 應用程式或網站,並會自動登入這兩個網站。

範例:將多個應用程式與一個網站建立關聯

您可以在 Digital Assets Link 檔案。例如,為 com.examplecom.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"
    ]
  }
}]

接著,在這兩個應用程式中宣告關聯:

  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>
    

範例:將應用程式與多個網站建立關聯

您可以在 Digital Assets Link 檔案以及各個網站代管該檔案。舉例來說 為 com.examplecom.example.pro 應用程式與以下網站建立關聯: https://signin.example.com/https://m.example.com/,請指定 和兩個網站 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": "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,包括主要數位 資產連結檔案:

[{
  "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>