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

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

ผ่าน keytool

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

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

การใช้เครื่องมือลิงก์ชิ้นงานอีกวิธีหนึ่งในการรับไฟล์ลิงก์เนื้อหาดิจิทัลสําหรับแอปที่ถูกต้องคือ

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

โดยใช้แนวคิดเดียวกันนี้กับก่อนหน้านี้ด้วยคีย์การรับรองหรือการอัปโหลด หากคุณติดตั้งแอปจาก เครื่องมือ Asset Link ใน 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 รายการ และในแต่ละแอปอาจมีได้มากกว่า คีย์เดียว ตัวอย่างเช่น หากต้องการเพิ่มคีย์ที่ 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