หากคุณเป็นนักพัฒนาเว็บที่เพิ่งเริ่มใช้ 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 เพราะจะช่วยเพิ่มความปลอดภัยให้กับคีย์ 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 เป็นคีย์การรับรองหรืออัปโหลด คุณก็ควรปกป้องและเก็บคีย์ดังกล่าวไว้เป็นส่วนตัว
เราจึงไม่แนะนำให้คอมมิตนี้ไว้ในการควบคุมเวอร์ชัน แต่ให้จำกัดจำนวนบุคคลที่มีสิทธิ์เข้าถึงแทน
ลิงก์เนื้อหาดิจิทัล (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 ที่เชื่อมโยงกับคีย์การรับรองของแอป สิ่งที่สำคัญที่ต้องทราบคือลายนิ้วมือที่เชื่อมโยงกับคีย์การรับรองและการอัปโหลดจะแตกต่างกัน โปรดคํานึงถึงความแตกต่างนี้ โดยเฉพาะอย่างยิ่งหากคุณสังเกตเห็นว่าแอปเปิดขึ้นเป็นแท็บที่กําหนดเองของ Chrome (โดยแสดงแถบเบราว์เซอร์) ในกรณีนี้ ไฟล์ assetlinks.json
ของคุณอาจไม่มีลายนิ้วมือที่ตรงกับคีย์ที่เหมาะสม
การมีลายนิ้วมือของใบรับรองที่ลงนามและใบรับรองการอัปโหลดไว้ใน assetlinks.json นั้น
มีประโยชน์เพื่อให้แก้ไขข้อบกพร่องของแอปในเครื่องได้ง่ายขึ้น ดูการเพิ่มคีย์เพิ่มเติมด้านล่างเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการมีคีย์ทั้ง 2 คีย์ในไฟล์ assetlinks.json
การรับลายนิ้วมือทำได้ 2-3 วิธี ซึ่งจะอธิบายอย่างละเอียดในส่วนถัดไป วิธีการทั้งหมดควรให้ลายนิ้วมือเดียวกัน คุณจึงเลือกวิธีการที่สะดวกที่สุดได้
ผ่าน Play Console
คุณอาจมีคีย์ 1 หรือ 2 คีย์ ทั้งนี้ขึ้นอยู่กับว่าคุณเลือกใช้ Play App Signing หรือไม่ วิธีเรียกข้อมูลลายนิ้วมือ SHA256 ที่เหมาะสมสำหรับแต่ละคีย์
- ไปที่ Play Console
- เลือกแอปที่คุณสนใจ
- ในเมนูการนำทางด้านซ้าย ในส่วนรุ่น ให้ไปที่การตั้งค่า -> ความสมบูรณ์ของแอป
- คัดลอก SHA256 สำหรับคีย์ที่เหมาะสม:
คีย์การรับรอง: คัดลอกลายนิ้วมือ SHA256 ของ"ใบรับรองคีย์ App Signing" ลายนิ้วมือนี้จะตรงกับแอปของคุณหากคุณดาวน์โหลดจาก Google Play Store เนื่องจาก Google Play จะเผยแพร่แอปของคุณที่รับรองด้วยคีย์ App Signing
อัปโหลดคีย์: คัดลอกลายนิ้วมือ SHA256 สำหรับ"ใบรับรองการอัปโหลดคีย์" ลายนิ้วมือนี้จะสอดคล้องกับแอปของคุณหากคุณติดตั้งแอปในเครื่อง (เช่น ผ่าน ADB ผ่าน USB) APK ดังกล่าว (ในเครื่องของคุณ) สร้างขึ้นโดย Bubblewrap และลงชื่อโดยคีย์ที่สร้างขึ้นให้คุณด้วย (ระหว่างการตั้งค่า
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) ที่ถูกต้องสำหรับแอปของคุณคือการใช้เครื่องมือลิงก์เนื้อหา โดยทำดังนี้
- ติดตั้ง Asset Link Tool จาก Play Store
- ดาวน์โหลดแอปจาก Google Play Store หรือติดตั้งแอปในเครื่องเดียวกัน
- เปิดแอปเครื่องมือลิงก์เนื้อหา คุณจะเห็นรายการแอปพลิเคชันทั้งหมดที่ติดตั้งในอุปกรณ์ตามชื่อแพ็กเกจ กรองรายการตามรหัสแอปพลิเคชันที่คุณเลือกไว้ก่อนหน้านี้ระหว่าง
bubblewrap init
แล้วคลิกรายการนั้น - คุณจะเห็นหน้าที่มีลายเซ็นของแอปและลิงก์เนื้อหาดิจิทัลที่สร้างขึ้น คลิกปุ่มคัดลอกหรือแชร์ที่ด้านล่างเพื่อส่งออกข้อมูลในลักษณะที่ต้องการ (เช่น บันทึกลงใน Google Keep ส่งอีเมลถึงตัวเอง)
แนวคิดนี้เหมือนกับคีย์ Signing หรือคีย์การอัปโหลด หากคุณติดตั้งแอปจาก Google Play Store เครื่องมือลิงก์ชิ้นงานจะแสดงลายนิ้วมือสำหรับคีย์ Signing ของแอป หากคุณติดตั้งแอปจากเครื่องภายในโดยตรง ลายนิ้วมือจะใช้สำหรับ 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