เปิดใช้การลงชื่อเข้าใช้โดยอัตโนมัติในแอปและเว็บไซต์ต่างๆ

หากแอปที่ใช้ Smart Lock สำหรับรหัสผ่านแชร์ฐานข้อมูลผู้ใช้กับเว็บไซต์ของคุณ หรือหากแอปและเว็บไซต์ของคุณใช้ผู้ให้บริการการลงชื่อเข้าใช้แบบรวมศูนย์ เช่น Google Sign-In คุณสามารถเชื่อมโยงแอปกับเว็บไซต์เพื่อให้ผู้ใช้บันทึกข้อมูลเข้าสู่ระบบเพียงครั้งเดียวแล้วลงชื่อเข้าใช้ทั้งแอปและเว็บไซต์โดยอัตโนมัติ

หากต้องการเชื่อมโยงแอปกับเว็บไซต์ ให้ประกาศการเชื่อมโยงโดยฝากไฟล์ JSON สำหรับลิงก์เนื้อหาดิจิทัล (Digital Asset Links) ในเว็บไซต์ และเพิ่มลิงก์ไปยังไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Asset Link) ลงในไฟล์ Manifest ของแอป

เมื่อโฮสต์การประกาศลิงก์เนื้อหาดิจิทัล (Digital Asset Links) ในเว็บไซต์ เท่ากับว่าคุณเปิดให้เว็บไซต์แชร์ข้อมูลป้อนข้อความอัตโนมัติกับแอปเมื่อใช้ Android 8.0 ขึ้นไปได้ด้วย

ข้อกำหนดเบื้องต้น

โดเมนสำหรับลงชื่อเข้าใช้ของเว็บไซต์ต้องพร้อมใช้งานผ่าน HTTPS

เชื่อมโยงแอปกับเว็บไซต์

  1. สร้างไฟล์ JSON ของลิงก์เนื้อหาดิจิทัล (Digital Asset Links)

    เช่น หากต้องการประกาศว่าเว็บไซต์ https://signin.example.com และแอป Android ที่มีชื่อแพ็กเกจ com.example แชร์ข้อมูลเข้าสู่ระบบได้ ให้สร้างไฟล์ชื่อ 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

    URL ของเว็บไซต์ในรูปแบบ https://domain[:optional_port] เช่น https://www.example.com

    domain ต้องเป็นแบบเต็ม และต้องไม่ใส่ optional_port เมื่อใช้พอร์ต 443 สำหรับ HTTPS

    เป้าหมาย site เป็นโดเมนรากได้เท่านั้น คุณไม่สามารถจำกัดการเชื่อมโยงแอปกับไดเรกทอรีย่อยที่เจาะจงได้ อย่ารวมเส้นทางใน URL เช่น เครื่องหมายทับปิดท้าย

    โดเมนย่อยไม่ถือว่าตรงกัน นั่นคือ หากคุณระบุ domain เป็น www.example.com โดเมน www.counter.example.com จะไม่เชื่อมโยงกับแอปของคุณ

    ช่องต่อไปนี้ระบุแอป Android

    namespace android_app
    package_name ชื่อแพ็กเกจที่ประกาศในไฟล์ Manifest ของแอป เช่น com.example.android
    sha256_cert_fingerprints ลายนิ้วมือ SHA256 ของใบรับรอง Signing ของแอป คุณใช้คำสั่งต่อไปนี้เพื่อสร้างลายนิ้วมือได้
    $ keytool -list -v -keystore my-release-key.keystore

    ดูรายละเอียดได้ที่ข้อมูลอ้างอิงเกี่ยวกับลิงก์เนื้อหาดิจิทัล (Digital Asset Links)

  2. โฮสต์ไฟล์ JSON ของลิงก์เนื้อหาดิจิทัล (Digital Assets Link) ที่ตำแหน่งต่อไปนี้บนโดเมนที่ลงชื่อเข้าใช้

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

    เช่น หากโดเมนที่ลงชื่อเข้าใช้คือ signin.example.com ให้โฮสต์ไฟล์ JSON ที่ https://signin.example.com/.well-known/assetlinks.json

    ประเภท MIME สำหรับไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Assets Link) ต้องเป็น JSON ตรวจสอบว่าเซิร์ฟเวอร์ส่งส่วนหัว Content-Type: application/json ในการตอบสนอง

  3. ตรวจสอบว่าโฮสต์อนุญาตให้ Google เรียกไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Asset Link) ของคุณ หากคุณมีไฟล์ robots.txt ไฟล์นั้นต้องอนุญาตให้ Agent ของ Googlebot ดึงข้อมูล /.well-known/assetlinks.json ได้ เว็บไซต์ส่วนใหญ่สามารถอนุญาตให้ Agent อัตโนมัติดึงไฟล์ในเส้นทาง /.well-known/ เพื่อให้บริการอื่นๆ เข้าถึงข้อมูลเมตาในไฟล์เหล่านั้นได้ ดังนี้

    User-agent: *
    Allow: /.well-known/
    

  4. ประกาศการเชื่อมโยงในแอป Android

    1. เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ Manifest ภายใต้ <application>

        <meta-data android:name="asset_statements" android:resource="@string/asset_statements" />
      
    2. เพิ่มทรัพยากรสตริง 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
      
  5. เผยแพร่แอปไปยัง Google Play Store คุณจะต้องเผยแพร่ผลงานในช่องทางสาธารณะ เพื่อรับการเชื่อมโยง

  6. (ไม่บังคับ) กรอกและส่ง แบบฟอร์มแอฟฟิลิเอต Smart Lock สำหรับรหัสผ่านเพื่อระบุว่าคุณทำตามขั้นตอนดังกล่าวแล้ว Google จะตรวจสอบว่าแอฟฟิลิเอตที่ส่งผ่านแบบฟอร์มใช้งานได้จริงหรือไม่เป็นระยะๆ และอาจติดต่อคุณในกรณีที่เกิดปัญหา

เมื่อการยืนยันเสร็จสมบูรณ์ ผู้ใช้แอปจะบันทึกข้อมูลเข้าสู่ระบบของตนไว้ในแอปหรือเว็บไซต์ได้ และลงชื่อเข้าใช้ทั้ง 2 อย่างโดยอัตโนมัติ

ตัวอย่าง: เชื่อมโยงแอปหลายรายการกับเว็บไซต์

คุณจะเชื่อมโยงแอปหลายรายการกับเว็บไซต์หนึ่งๆ ได้โดยระบุแต่ละแอปในไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Assets Link) ตัวอย่างเช่น หากต้องการเชื่อมโยงแอป com.example และ com.example.pro กับเว็บไซต์ที่ https://signin.example.com/ ให้ระบุทั้ง 2 แอปในไฟล์ 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"
    ]
  }
}]

จากนั้นประกาศการเชื่อมโยงในทั้ง 2 แอป ดังนี้

  1. เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ Manifest ภายใต้ <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.example และแอป com.example.pro กับเว็บไซต์ที่ https://signin.example.com/ และ https://m.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": "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"
    ]
  }
}]

จากนั้นในไฟล์ JSON ที่โฮสต์ที่ https://m.example.com/.well-known/assetlinks.json ให้รวมไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Asset Links) หลักดังนี้

[{
  "include": "https://signin.example.com/.well-known/assetlinks.json"
}]

สุดท้าย ให้ประกาศการเชื่อมโยงในทั้ง 2 แอป ดังนี้

  1. เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ Manifest ภายใต้ <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>