แนวคิดของ Android (สำหรับนักพัฒนาเว็บ)

Peter Conn
Peter Conn
Joyce Toh
Joyce Toh

หากคุณเป็นนักพัฒนาเว็บที่เพิ่งเริ่มใช้ Android และ Google Play โปรดทราบรายละเอียดบางอย่างต่อไปนี้ เรามีแหล่งข้อมูลและเอกสารประกอบมากมายเกี่ยวกับเรื่องนี้อยู่แล้ว (ขอขอบคุณทีม Android) แต่เราจะไฮไลต์แนวคิดสําคัญบางประการและความสัมพันธ์กับ Bubblewrap

คีย์การอัปโหลดกับคีย์การลงชื่อ

หากวางแผนที่จะใช้ Bubblewrap เพื่อสร้าง Android App Bundle (AAB) (หมายเหตุ: ตั้งแต่เดือนสิงหาคม 2021 เป็นต้นไป Google Play จะกำหนดให้แอปใหม่ทั้งหมดต้องใช้รูปแบบ Android App Bundle) หรือ APK เพื่ออัปโหลดและเผยแพร่ใน Google Play คุณจะต้องลงนามแอปด้วยคีย์การลงนาม Google Play มี 2 ตัวเลือกในการจัดการปัญหานี้ ดังนี้

  • Play App Signing (แนะนำอย่างยิ่ง): Google จะจัดการและปกป้องคีย์ Signing ของแอปให้คุณ โดยใช้คีย์ดังกล่าวรับรอง APK ของคุณเพื่อการเผยแพร่ Play App Signing ใช้คีย์ 2 รายการ "คีย์ App Signing" ที่ Google จะจัดการให้คุณ และ "คีย์การอัปโหลด" ที่คุณเก็บไว้และควรเก็บไว้เป็นความลับ คุณใช้คีย์การอัปโหลดเพื่อลงนามแอปสำหรับการอัปโหลดไปยัง Play Console ระบบนี้ช่วยให้คุณรีเซ็ตคีย์การอัปโหลดได้หากคีย์สูญหายหรือถูกแฮ็ก โดยติดต่อทีมสนับสนุนของ Play ปัจจุบัน Google Play ให้คุณอัปโหลดแอปเป็น AAB หรือ APK ได้ ดังนี้
    • Android App Bundle (AAB): เมื่ออัปโหลด AAB ไปยัง Play Console จะเป็นการเลื่อนการสร้างและการสร้าง APK ไปยัง Google Play Store เมื่อผู้ใช้ดาวน์โหลดและติดตั้งแอปของคุณ Google Play จะเผยแพร่แอปเป็น APK ที่รับรองแล้วให้กับผู้ใช้ ดังนั้น Google Play จะต้องเป็นผู้ลงนาม APK ด้วย ดังนั้นโดยค่าเริ่มต้น หากคุณอัปโหลดแอปเป็น AAB ไปยัง Play Console ระบบจะกำหนดให้คุณใช้ Play App Signing
    • APK: เมื่อใช้ APK คุณสามารถเลือกเลือกใช้ Play App Signing ได้ เราขอแนะนำให้เลือกใช้ Play App Signing เนื่องจากจะช่วยเพิ่มความปลอดภัยให้กับคีย์ App Signing ดังที่ได้แจ้งไปก่อนหน้านี้ Google Play จะกำหนดให้อัปโหลดแอปใหม่ทั้งหมดในรูปแบบ AAB ในเร็วๆ นี้ เราจึงขอแนะนำให้อัปโหลดในรูปแบบดังกล่าวแทนการอัปโหลด APK
  • จัดการคีย์ Signing ของคุณเอง: หากเลือกจัดการคีย์ของคุณเองและไม่เลือกใช้ Play App Signing คุณจะรับผิดชอบต่อคีย์ Signing ของแอปอย่างเต็มรูปแบบ ซึ่งแตกต่างจาก Play App Signing ตรงที่คุณจะรีเซ็ตไม่ได้หากคีย์สูญหาย ดังนั้นการสูญเสียคีย์ App Signing หมายความว่าคุณจะอัปเดตแอปไม่ได้

ในระหว่างการตั้งค่า bubblewrap init เมื่อถึงส่วน"ข้อมูลคีย์การรับรอง (5/5)" ระบบจะแจ้งให้คุณป้อน"ตำแหน่งที่เก็บคีย์" และ"ชื่อคีย์" หรือใช้ค่าเริ่มต้น ตำแหน่งที่เก็บคีย์เริ่มต้นคือไฟล์ android.keystore ในไดเรกทอรีโปรเจ็กต์ และชื่อคีย์เริ่มต้นคือ android หาก Bubblewrap ไม่พบคีย์สโตร์ที่ชื่อคีย์นั้นอยู่ในตำแหน่งดังกล่าว ก็จะสร้างคีย์สโตร์ให้และแจ้งให้คุณระบุรหัสผ่าน จดบันทึกรหัสผ่านที่คุณป้อนไว้เนื่องจากจะต้องใช้ในระหว่างกระบวนการสร้าง (bubblewrap build) ซึ่งระบบจะใช้คีย์ดังกล่าวเพื่อรับรองแอป หากคุณเลือกใช้ Play App Signing คีย์การรับรองที่ Bubblewrap สร้างขึ้นและใช้เพื่อรับรองแอปจะกลายเป็น "คีย์การอัปโหลด" ไม่ว่าคุณจะเลือกใช้คีย์ที่ Bubblewrap สร้างขึ้นเป็นคีย์การรับรองหรือคีย์การอัปโหลด คุณก็ควรเก็บคีย์ดังกล่าวไว้เป็นความลับ เราไม่แนะนำให้คอมมิตไฟล์ดังกล่าวในระบบควบคุมเวอร์ชัน แต่ให้จำกัดจำนวนบุคคลที่มีสิทธิ์เข้าถึงแทน

คุณต้องใช้ลิงก์ชิ้นงานดิจิทัลเพื่อประกาศความสัมพันธ์ระหว่างเว็บไซต์กับแอป Android ของคุณ เพื่อให้มั่นใจว่าแอป Android ที่ Bubblewrap สร้างขึ้นได้รับการยืนยันอย่างถูกต้องและเปิดเป็นกิจกรรมบนเว็บที่เชื่อถือได้ (แทนที่จะเป็นแท็บที่กำหนดเองของ Chrome) คุณจะต้องเพิ่มคีย์ที่เหมาะสมลงในไฟล์ assetlinks.json จากนั้นอัปโหลดไปยังเว็บไซต์ที่ .well-known/assetlinks.json (สัมพันธ์กับรูท) ไฟล์ assetlinks.json ควรอยู่ในรูปแบบนี้

[{
 "relation": ["delegate_permission/common.handle_all_urls"],
 "target": {
   "namespace": "android_app",
   "package_name": "com.your.package_name",
   "sha256_cert_fingerprints": [
     "XX:XX:XX:..."
   ]
 }
}]

รับลายนิ้วมือใบรับรอง SHA256

หากต้องการสร้างไฟล์ assetlinks.json คุณจะต้องมีลายนิ้วมือใบรับรอง SHA 256 ที่เชื่อมโยงกับคีย์การรับรองของแอป สิ่งที่สำคัญที่ต้องทราบคือลายนิ้วมือที่เชื่อมโยงกับคีย์การรับรองและการอัปโหลดจะแตกต่างกัน โปรดคำนึงถึงความแตกต่างนี้อยู่เสมอ โดยเฉพาะเมื่อสังเกตเห็นว่าแอปเปิดเป็นแท็บที่กำหนดเองของ Chrome (โดยมีแถบเบราว์เซอร์ที่มองเห็นได้) ในกรณีนี้ ไฟล์ assetlinks.json ของคุณอาจไม่มีลายนิ้วมือที่ตรงกับคีย์ที่เหมาะสม

คุณควรระบุทั้งลายนิ้วมือของใบรับรองการลงนามและใบรับรองการอัปโหลดใน assetlinks.json เพื่อแก้ไขข้อบกพร่องของแอปในเครื่องได้ง่ายขึ้น ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีมีคีย์ทั้ง 2 รายการในไฟล์ assetlinks.json ได้ที่การเพิ่มคีย์ด้านล่าง

การรับลายนิ้วมือทำได้ 2-3 วิธี ซึ่งจะอธิบายอย่างละเอียดในส่วนถัดไป วิธีการทั้งหมดควรให้ลายนิ้วมือเดียวกัน คุณจึงเลือกวิธีการที่สะดวกที่สุดได้

ผ่าน Play Console

คุณอาจมีคีย์ 1 หรือ 2 รายการ ทั้งนี้ขึ้นอยู่กับว่าคุณเลือกใช้ Play App Signing หรือไม่ วิธีเรียกข้อมูลลายนิ้วมือ SHA256 ที่เหมาะสมสำหรับแต่ละคีย์

  1. ไปที่ Play Console
  2. เลือกแอปที่คุณสนใจ
  3. ในเมนูการนำทางด้านซ้าย ภายในรุ่น ให้ไปที่การตั้งค่า -> ความสมบูรณ์ของแอป
  4. คัดลอก SHA256 ของคีย์ที่เหมาะสม

เรียกข้อมูลลายนิ้วมือใบรับรอง SHA256 ที่เหมาะสมสำหรับคีย์การรับรองหรือคีย์การอัปโหลด

  • คีย์การรับรอง: คัดลอกลายนิ้วมือ SHA256 ของ"ใบรับรองคีย์ App Signing" ลายนิ้วมือนี้จะตรงกับแอปของคุณหากคุณดาวน์โหลดจาก Google Play Store เนื่องจาก Google Play จะเผยแพร่แอปของคุณที่รับรองด้วยคีย์ App Signing

  • อัปโหลดคีย์: คัดลอกลายนิ้วมือ SHA256 สำหรับ"ใบรับรองการอัปโหลดคีย์" ลายนิ้วมือนี้จะสอดคล้องกับแอปของคุณหากคุณติดตั้งแอปในเครื่อง (เช่น ผ่าน ADB ผ่าน USB) APK ดังกล่าว (ในเครื่องของคุณ) สร้างขึ้นโดย Bubblewrap และลงชื่อโดยคีย์ที่สร้างขึ้นให้คุณด้วย (ระหว่างการตั้งค่า init) โปรดทราบว่าคีย์นี้อาจเป็นคีย์การรับรองสําหรับแอปที่ติดตั้งในเครื่อง แต่จริงๆ แล้วจะเป็น "คีย์การอัปโหลด" เมื่อคุณเผยแพร่แอปผ่าน Play

ผ่าน keytool

keytool เป็นเครื่องมือจัดการคีย์และใบรับรอง คุณสามารถใช้ Keytool เพื่อดึงข้อมูลลายนิ้วมือ SHA 256 ที่เชื่อมโยงกับ APK หรือ AAB Bubblewrap ที่สร้างขึ้น โปรดทราบว่าลายนิ้วมือนี้มีไว้สำหรับคีย์การรับรองในเครื่อง และหากคุณอัปโหลดแอปไปยัง Play และเลือกใช้ Play App Signing คีย์นี้จะกลายเป็น "คีย์การอัปโหลด"

keytool -printcert -jarfile [path to APK or AAB] | grep SHA256

อีกวิธีในการรับไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Asset Links) ที่ถูกต้องสำหรับแอปของคุณคือการใช้เครื่องมือลิงก์เนื้อหา โดยทำดังนี้

  1. ติดตั้ง Asset Link Tool จาก Play Store
  2. ดาวน์โหลดแอปจาก Google Play Store หรือติดตั้งแอปในเครื่องเดียวกัน
  3. เปิดแอปเครื่องมือลิงก์ชิ้นงาน แล้วคุณจะเห็นรายการแอปพลิเคชันทั้งหมดที่ติดตั้งในอุปกรณ์ตามชื่อแพ็กเกจ กรองรายการตามรหัสแอปพลิเคชันที่คุณเลือกไว้ก่อนหน้านี้ระหว่าง bubblewrap init แล้วคลิกรายการนั้น
  4. คุณจะเห็นหน้าเว็บที่แสดงลายเซ็นของแอปและลิงก์เนื้อหาดิจิทัลที่สร้างขึ้น คลิกปุ่มคัดลอกหรือแชร์ที่ด้านล่างเพื่อส่งออกข้อมูลในลักษณะที่ต้องการ (เช่น บันทึกลงใน Google Keep ส่งอีเมลถึงตัวเอง)

แนวคิดนี้เหมือนกับคีย์ Signing หรือคีย์การอัปโหลด หากคุณติดตั้งแอปจาก Google Play Store เครื่องมือลิงก์เนื้อหาจะแสดงลายนิ้วมือสำหรับคีย์การรับรองของแอป หากคุณติดตั้งแอปจากเครื่องโดยตรง ลายนิ้วมือจะเป็นของคีย์ที่ Bubblewrap สร้างขึ้น

เมื่ออัปโหลดแล้ว ให้ตรวจสอบว่าคุณเข้าถึงไฟล์ลิงก์เนื้อหาในเบราว์เซอร์ได้ ตรวจสอบว่า https://example.com/.well-known/assetlinks.json แสดงไฟล์ที่คุณเพิ่งอัปโหลด

เว็บไซต์ที่ใช้ Jekyll

หากเว็บไซต์สร้างขึ้นโดย Jekyll (เช่น GitHub Pages) คุณจะต้องเพิ่มบรรทัดการกําหนดค่าเพื่อให้ไดเรกทอรี .well-known รวมอยู่ในเอาต์พุต ความช่วยเหลือของ GitHub มีข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ สร้างไฟล์ชื่อ _config.yml ที่รูทของเว็บไซต์ (หรือเพิ่มลงในไฟล์ที่มีอยู่หากมี) แล้วป้อนข้อมูลต่อไปนี้

# Folders with dotfiles are ignored by default.
include: [.well-known]

การเพิ่มคีย์

ไฟล์ Digital Asset Link อาจมีแอปมากกว่า 1 แอป และแต่ละแอปอาจมีคีย์ได้มากกว่า 1 คีย์ เช่น หากต้องการเพิ่มคีย์ที่ 2 ให้ใช้เครื่องมือลิงก์ชิ้นงานเพื่อระบุคีย์และเพิ่มเป็นรายการที่ 2 โค้ดใน Chrome ที่แยกวิเคราะห์ JSON นี้ค่อนข้างเข้มงวด ดังนั้นโปรดตรวจสอบว่าคุณไม่ได้เพิ่มคอมมาเกินไว้ที่ท้ายรายการโดยไม่ได้ตั้งใจ

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
},{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.your.package_name",
    "sha256_cert_fingerprints": [
      "XX:XX:XX:..."
    ]
  }
}]

การแก้ปัญหา

Chrome จะบันทึกสาเหตุที่การยืนยันลิงก์เนื้อหาดิจิทัลไม่สำเร็จ และคุณสามารถดูบันทึกในอุปกรณ์ Android ด้วย adb logcat หากกำลังพัฒนาบน Linux/Mac คุณจะเห็นบันทึกที่เกี่ยวข้องจากอุปกรณ์ที่เชื่อมต่อได้โดยใช้

> adb logcat -v brief | grep -e OriginVerifier -e digital_asset_links

ตัวอย่างเช่น หากเห็นข้อความ Statement failure matching fingerprint. คุณควรใช้เครื่องมือลิงก์ชิ้นงานเพื่อดูลายเซ็นของแอปและตรวจสอบว่าตรงกับลายเซ็นในไฟล์ assetlinks.json