คุณสามารถผสานรวม App Distribution เข้ากับกระบวนการบิลด์ Android ได้โดยใช้ปลั๊กอิน App Distribution Gradle ปลั๊กอินนี้ช่วยให้คุณระบุผู้ทดสอบและหมายเหตุเกี่ยวกับรุ่นในไฟล์ Gradle ของแอปได้ ซึ่งจะช่วยให้คุณกำหนดค่าการเผยแพร่สำหรับบิลด์ประเภทต่างๆ และตัวแปรของแอปได้
คู่มือนี้จะอธิบายวิธีแจกจ่าย APK ให้ผู้ทดสอบโดยใช้App Distributionปลั๊กอิน Gradle
ก่อนเริ่มต้น
เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้ดำเนินการ
หากไม่ได้ใช้ผลิตภัณฑ์ Firebase อื่นๆ คุณก็สร้างโปรเจ็กต์และลงทะเบียนแอปได้เพียงเท่านี้ แต่หากตัดสินใจที่จะใช้ผลิตภัณฑ์เพิ่มเติมในอนาคต โปรดทําตามขั้นตอนทั้งหมดในหน้าเว็บที่ลิงก์ไว้ด้านบน
ขั้นตอนที่ 1 ตั้งค่าโปรเจ็กต์ Android
ในไฟล์ Gradle ระดับรูท (ระดับโปรเจ็กต์) (
<project>/build.gradle.kts
หรือ<project>/build.gradle
) ให้เพิ่ม App Distributionปลั๊กอิน Gradle เป็น Dependency ดังนี้Kotlin
plugins { // ... id("com.android.application") version "7.3.0" apply false // Make sure that you have the Google services Gradle plugin dependency id("com.google.gms.google-services") version "4.4.2" apply false // Add the dependency for the App Distribution Gradle plugin id("com.google.firebase.appdistribution") version "5.0.0" apply false }
Groovy
plugins { // ... id 'com.android.application' version '7.3.0' apply false // Make sure that you have the Google services Gradle plugin dependency id 'com.google.gms.google-services' version '4.4.2' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '5.0.0' apply false }
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็นไฟล์
<project>/<app-module>/build.gradle.kts
หรือ<project>/<app-module>/build.gradle
) ให้เพิ่มปลั๊กอิน App Distribution Gradle ดังนี้Kotlin
plugins { id("com.android.application") // Make sure that you have the Google services Gradle plugin id("com.google.gms.google-services") // Add the App Distribution Gradle plugin id("com.google.firebase.appdistribution") }
Groovy
plugins { id 'com.android.application' // Make sure that you have the Google services Gradle plugin id 'com.google.gms.google-services' // Add the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' }
หากคุณอยู่หลังพร็อกซีหรือไฟร์วอลล์ของบริษัท ให้เพิ่มพร็อพเพอร์ตี้ระบบ Java ต่อไปนี้ที่ช่วยให้ App Distribution อัปโหลดการเผยแพร่ไปยัง Firebase ได้
-Djavax.net.ssl.trustStore=/path/to/truststore -Djavax.net.ssl.trustStorePassword=password
ขั้นตอนที่ 2 ตรวจสอบสิทธิ์ด้วย Firebase
คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ด้วยวิธีใดวิธีหนึ่งต่อไปนี้ก่อนจึงจะใช้ปลั๊กอิน Gradle ได้ โดยค่าเริ่มต้น ปลั๊กอิน Gradle จะค้นหาข้อมูลเข้าสู่ระบบจาก Firebase CLI หากไม่ได้ใช้วิธีการตรวจสอบสิทธิ์อื่นๆ
ขั้นตอนที่ 3 กำหนดค่าพร็อพเพอร์ตี้การจัดจำหน่าย
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติจะเป็นไฟล์ <project>/<app-module>/build.gradle.kts
หรือ <project>/<app-module>/build.gradle
) ให้กําหนดค่า App Distribution โดยเพิ่มส่วน firebaseAppDistribution
อย่างน้อย 1 ส่วน
ตัวอย่างเช่น หากต้องการเผยแพร่บิลด์ release
ให้แก่ผู้ทดสอบ ให้ทำตามวิธีการต่อไปนี้
Kotlin
เวอร์ชัน 3.1.0 ขึ้นไปimport com.google.firebase.appdistribution.gradle.firebaseAppDistribution android { // ... buildTypes { getByName("release") { firebaseAppDistribution { artifactType = "APK" releaseNotesFile = "/path/to/releasenotes.txt" testers = "ali@example.com, bri@example.com, cal@example.com" } } } // ... }
Groovy
android { // ... buildTypes { release { firebaseAppDistribution { artifactType="APK" releaseNotesFile="/path/to/releasenotes.txt" testers="ali@example.com, bri@example.com, cal@example.com" } } } // ... }
คุณสามารถกําหนดค่า App Distribution สําหรับประเภทบิลด์และตัวแปรผลิตภัณฑ์ได้
เช่น หากต้องการเผยแพร่บิลด์ debug
และ release
ในรุ่นผลิตภัณฑ์ "เดโม" และ "สมบูรณ์" ให้ทำตามวิธีการต่อไปนี้
Kotlin
เวอร์ชัน 3.1.0 ขึ้นไปimport com.google.firebase.appdistribution.gradle.firebaseAppDistribution android { // ... buildTypes { getByName("debug") {...} getByName("release") {...} } flavorDimensions += "version" productFlavors { create("demo") { dimension = "version" firebaseAppDistribution { releaseNotes = "Release notes for demo version" testers = "demo@testers.com" } } create("full") { dimension = "version" firebaseAppDistribution { releaseNotes = "Release notes for full version" testers = "full@testers.com" } } } // ... }
Groovy
android { // ... buildTypes { debug {...} release {...} } flavorDimensions "version" productFlavors { demo { dimension "version" firebaseAppDistribution { releaseNotes="Release notes for demo version" testers="demo@testers.com" } } full { dimension "version" firebaseAppDistribution { releaseNotes="Release notes for full version" testers="full@testers.com" } } } // ... }
ใช้พารามิเตอร์ต่อไปนี้เพื่อกําหนดค่าการเผยแพร่
App Distribution พารามิเตอร์การสร้าง | |
---|---|
appId
|
รหัสแอป Firebase ของแอป จำเป็นเฉพาะในกรณีที่คุณไม่ได้ติดตั้งปลั๊กอิน Gradle ของบริการ Google คุณดูรหัสแอปได้ในไฟล์ appId="1:1234567890:android:321abc456def7890" |
serviceCredentialsFile
|
เส้นทางไปยังไฟล์ JSON คีย์ส่วนตัวของบัญชีบริการ ต้องระบุเฉพาะในกรณีที่ใช้การตรวจสอบสิทธิ์ด้วยบัญชีบริการ |
artifactType
|
ระบุประเภทไฟล์ของแอป ตั้งค่าเป็น |
artifactPath
|
เส้นทางสัมบูรณ์ไปยังไฟล์ APK หรือ AAB ที่ต้องการอัปโหลด |
releaseNotes หรือ releaseNotesFile |
บันทึกประจำรุ่นสำหรับบิลด์นี้ คุณสามารถระบุหมายเหตุประจำรุ่นโดยตรงหรือระบุเส้นทางไปยังไฟล์ข้อความธรรมดาก็ได้ |
testers หรือ testersFile |
อีเมลของผู้ทดสอบที่คุณต้องการเผยแพร่บิลด์ให้ คุณสามารถระบุผู้ทดสอบเป็นรายการอีเมลที่คั่นด้วยคอมมา ดังนี้ testers="ali@example.com, bri@example.com, cal@example.com" หรือจะระบุเส้นทางไปยังไฟล์ที่มีรายการอีเมลที่คั่นด้วยคอมมาก็ได้ โดยทำดังนี้ testersFile="/path/to/testers.txt" |
groups หรือ groupsFile |
กลุ่มผู้ทดสอบที่คุณต้องการแจกจ่ายบิลด์ให้ (ดูจัดการผู้ทดสอบ)
คุณระบุกลุ่มได้โดยใช้ คุณสามารถระบุกลุ่มเป็นรายการชื่อแทนกลุ่มที่คั่นด้วยคอมมา ดังนี้ groups="qa-team, android-testers" หรือจะระบุเส้นทางไปยังไฟล์ที่มีรายการอีเมลแทนกลุ่มที่คั่นด้วยคอมมาก็ได้ ดังนี้ groupsFile="/path/to/tester-groups.txt" |
testDevices หรือ testDevicesFile |
การเผยแพร่ประเภทต่อไปนี้เป็นส่วนหนึ่งของฟีเจอร์เบต้าสำหรับผู้ทดสอบอัตโนมัติ อุปกรณ์ทดสอบที่คุณต้องการแจกจ่ายบิลด์ให้ (ดูการทดสอบอัตโนมัติ) คุณสามารถระบุอุปกรณ์ทดสอบเป็นรายการข้อมูลจำเพาะของอุปกรณ์ที่คั่นด้วยเครื่องหมายอัฒภาค ดังนี้ testDevices="model=shiba,version=34,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait" หรือจะระบุเส้นทางไปยังไฟล์ที่มีรายการข้อมูลจำเพาะของอุปกรณ์คั่นด้วยเซมิโคลอนก็ได้ ดังนี้ testDevicesFile="/path/to/testDevices.txt" |
testUsername |
ชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ในระหว่างการทดสอบอัตโนมัติ |
testPassword หรือ testPasswordFile |
รหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ในระหว่างการทดสอบอัตโนมัติ หรือจะระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มีรหัสผ่านก็ได้ โดยทำดังนี้ testPasswordFile="/path/to/testPassword.txt" |
testUsernameResource |
ชื่อทรัพยากรสำหรับช่องชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ในระหว่างการทดสอบอัตโนมัติ |
testPasswordResource |
ชื่อทรัพยากรสำหรับช่องรหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ในระหว่างการทดสอบอัตโนมัติ |
testNonBlocking |
เรียกใช้การทดสอบอัตโนมัติแบบไม่พร้อมกัน ไปที่คอนโซล Firebase เพื่อดูผลการทดสอบอัตโนมัติ |
stacktrace
|
พิมพ์สแต็กเทรซสําหรับข้อยกเว้นของผู้ใช้ ซึ่งจะมีประโยชน์เมื่อแก้ไขข้อบกพร่อง |
ขั้นตอนที่ 4 เผยแพร่แอปให้ผู้ทดสอบ
สุดท้าย หากต้องการแพ็กเกจแอปทดสอบและเชิญผู้ทดสอบ ให้สร้างเป้าหมาย
BUILD-VARIANT
และappDistributionUploadBUILD-VARIANT
ด้วย Wrapper ของ Gradle ของโปรเจ็กต์ โดยที่ BUILD-VARIANT คือ Flavor ผลิตภัณฑ์และประเภทบิลด์ที่ไม่บังคับซึ่งคุณกำหนดค่าไว้ในขั้นตอนก่อนหน้า ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรผลิตภัณฑ์ได้ที่หัวข้อกำหนดค่าตัวแปรของบิลด์เช่น หากต้องการเผยแพร่แอปโดยใช้ตัวแปรรุ่น
release
ให้เรียกใช้คำสั่งต่อไปนี้./gradlew assembleRelease appDistributionUploadRelease
หรือหากคุณตรวจสอบสิทธิ์ด้วยบัญชี Google และไม่ได้ระบุข้อมูลเข้าสู่ระบบในไฟล์บิลด์ Gradle ให้ใส่ตัวแปร
FIREBASE_TOKEN
ดังนี้export FIREBASE_TOKEN=1/a1b2c3d4e5f67890 ./gradlew --stop // Only needed for environment variable changes ./gradlew assembleRelease appDistributionUploadRelease
นอกจากนี้ คุณยังลบล้างค่าที่ตั้งไว้ในไฟล์
build.gradle
ได้โดยส่งอาร์กิวเมนต์บรรทัดคำสั่งในรูปแบบ--<property-name>=<property-value>
เช่นวิธีอัปโหลดบิลด์การแก้ไขข้อบกพร่องไปยัง App Distribution
./gradlew bundleDebug appDistributionUploadDebug --artifactType="APK"
วิธีเชิญผู้ทดสอบเพิ่มเติมหรือนำผู้ทดสอบที่มีอยู่ออกจากโปรเจ็กต์ Firebase
./gradlew appDistributionAddTesters --projectNumber=<project_number> --emails="anothertester@email.com, moretesters@email.com"
./gradlew appDistributionRemoveTesters --projectNumber=<project_number> --emails="anothertester@email.com, moretesters@email.com"
เมื่อเพิ่มผู้ทดสอบลงในโปรเจ็กต์ Firebase แล้ว คุณจะเพิ่มผู้ทดสอบไปยังรุ่นต่างๆ ได้ ผู้ทดสอบที่ถูกนำออกจะเข้าถึงรุ่นต่างๆ ในโปรเจ็กต์ไม่ได้อีกต่อไป แต่อาจยังคงเข้าถึงรุ่นต่างๆ ได้ในช่วงระยะเวลาหนึ่ง
นอกจากนี้ คุณยังระบุผู้ทดสอบได้โดยใช้
--file="/path/to/testers.txt"
แทน--emails
งาน
appDistributionAddTesters
และappDistributionRemoveTesters
ยังยอมรับอาร์กิวเมนต์ต่อไปนี้ด้วยprojectNumber
: หมายเลขโปรเจ็กต์ FirebaseserviceCredentialsFile
: เส้นทางไปยังไฟล์ข้อมูลเข้าสู่ระบบบริการของ Google ซึ่งเป็นอาร์กิวเมนต์เดียวกับที่การดําเนินการอัปโหลดใช้
ปลั๊กอิน Gradle จะแสดงลิงก์ต่อไปนี้หลังจากอัปโหลดรุ่น ลิงก์เหล่านี้จะช่วยคุณจัดการไบนารีและตรวจสอบว่าผู้ทดสอบและนักพัฒนาซอฟต์แวร์รายอื่นๆ มีรุ่นที่ถูกต้อง
firebase_console_uri
- ลิงก์ไปยังคอนโซล Firebase ที่แสดงรุ่นเดียว คุณสามารถแชร์ลิงก์นี้กับนักพัฒนาแอปคนอื่นๆ ในองค์กรได้testing_uri
- ลิงก์ไปยังรุ่นในประสบการณ์การใช้งานของผู้ทดสอบ (แอป Android เวอร์ชันเนทีฟ) ซึ่งช่วยให้ผู้ทดสอบดูหมายเหตุรุ่นและติดตั้งแอปลงในอุปกรณ์ได้ ผู้ทดสอบต้องมีสิทธิ์เข้าถึงรุ่นจึงจะใช้ลิงก์ได้binary_download_uri
- ลิงก์ที่รับรองซึ่งดาวน์โหลดและติดตั้งไบนารีของแอป (ไฟล์ APK หรือ AAB) โดยตรง ลิงก์จะหมดอายุใน 1 ชั่วโมง
เมื่อคุณเผยแพร่บิลด์แล้ว บิลด์จะปรากฏในแดชบอร์ดApp Distributionของคอนโซล Firebase เป็นเวลา 150 วัน (5 เดือน) เมื่อบิลด์เหลือเวลาอีก 30 วันจะหมดอายุ ประกาศการหมดอายุจะปรากฏทั้งในคอนโซลและรายการบิลด์ของผู้ทดสอบในอุปกรณ์ทดสอบ
ผู้ทดสอบที่ยังไม่ได้ได้รับเชิญให้ทดสอบแอปจะได้รับคำเชิญทางอีเมลเพื่อเริ่มต้นใช้งาน และผู้ทดสอบปัจจุบันจะได้รับการแจ้งเตือนทางอีเมลว่าบิลด์ใหม่พร้อมให้ทดสอบแล้ว (อ่านคู่มือการตั้งค่าผู้ทดสอบเพื่อดูวิธีการติดตั้งแอปทดสอบ) คุณสามารถตรวจสอบสถานะของผู้ทดสอบแต่ละคนได้ว่ายอมรับคำเชิญหรือไม่และดาวน์โหลดแอปหรือไม่ได้ในคอนโซล Firebase
ผู้ทดสอบมีเวลา 30 วันในการตอบรับคำเชิญให้ทดสอบแอปก่อนที่คำเชิญจะหมดอายุ เมื่อคำเชิญเหลือเวลาอีก 5 วันจะหมดอายุ ประกาศการหมดอายุจะปรากฏในFirebaseคอนโซลข้างผู้ทดสอบในรุ่น คุณต่ออายุคำเชิญได้โดยการส่งคำเชิญอีกครั้งโดยใช้เมนูแบบเลื่อนลงในแถวผู้ทดสอบ
ขั้นตอนถัดไป
ใช้ความคิดเห็นในแอปเพื่อให้ผู้ทดสอบส่งความคิดเห็นเกี่ยวกับแอปของคุณได้ง่ายๆ (รวมถึงภาพหน้าจอ)
ดูวิธีแสดงการแจ้งเตือนในแอปให้ผู้ทดสอบทราบเมื่อมีเวอร์ชันใหม่ของแอปให้ติดตั้ง
ไปที่ Android App Bundle Codelab เพื่อดูวิธีเผยแพร่รุ่น App Bundle แบบทีละขั้นตอน
ดูแนวทางปฏิบัติแนะนำสำหรับการจัดจำหน่ายแอป Android ให้แก่ผู้ทดสอบ QA โดยใช้ CI/CD