คุณสามารถผสานรวม App Distribution เข้ากับกระบวนการบิลด์ Android โดยใช้ปลั๊กอิน Gradle ของ App Distribution ได้ ปลั๊กอินช่วยให้คุณระบุผู้ทดสอบและ หมายเหตุประจำรุ่นในไฟล์ Gradle ของแอปได้ ซึ่งจะช่วยให้คุณกำหนดค่าการเผยแพร่ สำหรับประเภทบิลด์และตัวแปรต่างๆ ของแอปได้
คู่มือนี้อธิบายวิธีเผยแพร่ APK ให้ผู้ทดสอบโดยใช้ App Distribution ปลั๊กอิน Gradle
ก่อนเริ่มต้น
เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้เพิ่ม
หากไม่ได้ใช้ผลิตภัณฑ์อื่นๆ ของ Firebase คุณจะต้องสร้างโปรเจ็กต์และลงทะเบียนแอปเท่านั้น แต่หากตัดสินใจใช้ผลิตภัณฑ์เพิ่มเติมในอนาคต โปรดทําตามขั้นตอนทั้งหมดในหน้าที่ลิงก์ไว้ด้านบน
เปิดหน้าApp Distributionของคอนโซล Firebase เลือกโปรเจ็กต์ 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.5.0" apply false // Add the dependency for the App Distribution Gradle plugin id("com.google.firebase.appdistribution") version "5.3.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.5.0' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '5.3.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
ก่อนที่จะใช้ปลั๊กอิน Gradle ได้ คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ด้วยวิธีใดวิธีหนึ่งต่อไปนี้ก่อน โดยค่าเริ่มต้น ปลั๊กอิน Gradle จะค้นหาข้อมูลเข้าสู่ระบบจาก Firebase CLI หากไม่ได้ใช้วิธีการตรวจสอบสิทธิ์อื่น
ขั้นตอนที่ 3 กำหนดค่าพร็อพเพอร์ตี้การจัดจำหน่าย
ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ
<project>/<app-module>/build.gradle.kts หรือ
<project>/<app-module>/build.gradle) ให้กำหนดค่า App Distribution โดยเพิ่มส่วน firebaseAppDistribution อย่างน้อย 1 ส่วน
เช่น หากต้องการเผยแพร่releaseบิลด์ไปยังผู้ทดสอบ ให้ทำตาม
วิธีการต่อไปนี้
Kotlin
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 ใน Product Flavor "demo" และ "full"
ให้ทำตามวิธีการต่อไปนี้
Kotlin
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 |
อุปกรณ์ทดสอบที่คุณต้องการเรียกใช้การทดสอบ เอเจนต์ App Testing คุณระบุอุปกรณ์ทดสอบเป็นรายการข้อมูลจำเพาะของอุปกรณ์ที่คั่นด้วยเครื่องหมาย อัฒภาคได้ดังนี้ testDevices="model=shiba,version=34,locale=en,orientation=portrait" หรือจะระบุเส้นทางไปยังไฟล์ที่มีรายการข้อกำหนดของอุปกรณ์ที่คั่นด้วยเครื่องหมายอัฒภาคก็ได้ โดยทำดังนี้ testDevicesFile="/path/to/testDevices.txt" |
testUsername |
ชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบเอเจนต์ App Testing |
testPassword หรือ testPasswordFile |
รหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบเอเจนต์ App Testing หรือจะระบุเส้นทางไปยังไฟล์ข้อความธรรมดาที่มีรหัสผ่านก็ได้ โดยทำดังนี้ testPasswordFile="/path/to/testPassword.txt" |
testUsernameResource |
ชื่อทรัพยากรสำหรับช่องชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบเอเจนต์ App Testing |
testPasswordResource |
ชื่อทรัพยากรสำหรับช่องรหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบเอเจนต์ App Testing |
testNonBlocking |
หากตั้งค่าเมื่อเรียกใช้การทดสอบของ เอเจนต์ App Testing คำสั่งจะเริ่มการทดสอบแล้วกลับทันที แทนที่จะรอให้การทดสอบเสร็จสมบูรณ์ หากต้องการดูผลการทดสอบ ให้ไปที่คอนโซล Firebase หากไม่ได้ตั้งค่าสถานะนี้ คำสั่ง จะบล็อกจนกว่าการทดสอบจะเสร็จสมบูรณ์ และจะออกพร้อมรหัส ข้อผิดพลาดหากการทดสอบใดๆ ล้มเหลว |
resultsBucket
|
Bucket ของ Google Cloud Storage (GCS) ที่กำหนดเองซึ่งใช้จัดเก็บผลการทดสอบ หากเว้นว่างไว้ ระบบจะใช้ที่เก็บข้อมูลเริ่มต้น Bucket ต้อง เป็นของโปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงิน และการระบุ Bucket จะทำให้มีการเรียกเก็บเงินสำหรับพื้นที่เก็บข้อมูลที่ใช้ |
stacktrace
|
พิมพ์ Stacktrace สำหรับข้อยกเว้นของผู้ใช้ ซึ่งจะเป็นประโยชน์เมื่อ แก้ไขข้อบกพร่อง |
ขั้นตอนที่ 4 เผยแพร่แอปไปยังผู้ทดสอบ
สุดท้ายนี้ หากต้องการแพ็กเกจแอปทดสอบและเชิญผู้ทดสอบ ให้สร้างเป้าหมาย
BUILD-VARIANTและappDistributionUploadBUILD-VARIANTด้วย Gradle Wrapper ของโปรเจ็กต์ โดย BUILD-VARIANT คือ รสชาติผลิตภัณฑ์และประเภทบิลด์ที่คุณกำหนดค่าไว้ในขั้นตอนก่อนหน้า (ไม่บังคับ) ดูข้อมูลเพิ่มเติมเกี่ยวกับ รสชาติของผลิตภัณฑ์ได้ที่กำหนดค่าตัวแปร บิลด์เช่น หากต้องการเผยแพร่แอปโดยใช้
releaseตัวแปรบิลด์ ให้เรียกใช้คำสั่งต่อไปนี้./gradlew assembleRelease appDistributionUploadRelease
หรือหากคุณตรวจสอบสิทธิ์ด้วยบัญชี Google และไม่ได้ระบุข้อมูลเข้าสู่ระบบในไฟล์บิลด์ Gradle ให้รวมตัวแปร
FIREBASE_TOKENexport 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