แนวคิดของ 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 คุณจะต้องรับรองแอปด้วยคีย์ Signing Google Play มี 2 ตัวเลือกในการจัดการเรื่องนี้ ได้แก่

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

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

คุณต้องใช้ลิงก์เนื้อหาดิจิทัล (Digital Asset Links) ในการประกาศความสัมพันธ์ระหว่างเว็บไซต์กับแอป 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 ที่เชื่อมโยงกับคีย์ Signing ของแอป สิ่งสำคัญที่ควรทราบคือลายนิ้วมือที่เชื่อมโยงกับคีย์การลงนามและอัปโหลดจะแตกต่างกันไป คุณจะต้องคำนึงถึงความแตกต่างนี้อยู่เสมอ โดยเฉพาะอย่างยิ่งหากคุณสังเกตเห็นว่าแอปเปิดขึ้นเป็นแท็บที่กำหนดเองของ Chrome (โดยจะเห็นแถบเบราว์เซอร์อยู่) ด้วยเหตุนี้จึงเป็นไปได้ว่าไฟล์ assetlinks.json ของคุณไม่มีลายนิ้วมือที่สอดคล้องกับคีย์ที่เหมาะสม

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

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

ผ่าน Play Console

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

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

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

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

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

ผ่าน 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. ติดตั้งเครื่องมือลิงก์ชิ้นงานจาก Play Store
  2. ดาวน์โหลดแอปจาก Google Play Store หรือติดตั้งในอุปกรณ์เดียวกัน
  3. เปิดแอปเครื่องมือลิงก์เนื้อหา คุณจะเห็นรายการแอปพลิเคชันทั้งหมดที่ติดตั้งในอุปกรณ์ตามชื่อแพ็กเกจ กรองรายการตามรหัสแอปพลิเคชันที่คุณเลือกไว้ก่อนหน้านี้ระหว่าง bubblewrap init แล้วคลิกรายการนั้น
  4. คุณจะเห็นหน้าที่แสดงลายเซ็นของแอปและลิงก์เนื้อหาดิจิทัลที่สร้างขึ้น คลิกปุ่ม คัดลอกหรือแชร์ ที่ด้านล่างเพื่อส่งออกในรูปแบบที่คุณต้องการ (เช่น บันทึกใน Google Keep แล้วส่งอีเมลให้ตัวเอง)

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

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

เว็บไซต์ตาม Jekyll

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

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

กำลังเพิ่มคีย์

ไฟล์ลิงก์เนื้อหาดิจิทัล (Digital Asset Link) อาจมีแอปมากกว่า 1 รายการ และแต่ละรายการจะมีคีย์ได้มากกว่า 1 คีย์ เช่น หากต้องการเพิ่มคีย์ที่ 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 จะบันทึกสาเหตุที่ทำให้การยืนยันลิงก์เนื้อหาดิจิทัล (Digital Asset Links) ไม่สำเร็จ และคุณจะดูบันทึกได้ในอุปกรณ์ Android ที่ใช้ adb logcat หากคุณกำลังพัฒนาบน Linux/Mac คุณสามารถดูบันทึกที่เกี่ยวข้องจากอุปกรณ์ที่เชื่อมต่อที่มีสิ่งต่อไปนี้

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

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