คุณสามารถรวม 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 เป็นการพึ่งพา:Kotlin
plugins { // ... id("com.android.application") version "7.2.0" apply false // Make sure that you have the Google services Gradle plugin dependency id("com.google.gms.google-services") version "4.3.15" apply false // Add the dependency for the App Distribution Gradle plugin id("com.google.firebase.appdistribution") version "4.0.0" apply false }
Groovy
plugins { // ... id 'com.android.application' version '7.2.0' apply false // Make sure that you have the Google services Gradle plugin dependency id 'com.google.gms.google-services' version '4.3.15' apply false // Add the dependency for the App Distribution Gradle plugin id 'com.google.firebase.appdistribution' version '4.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
ก่อนที่คุณจะสามารถใช้ปลั๊กอิน Gradle ได้ คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ด้วยวิธีใดวิธีหนึ่งต่อไปนี้ก่อน ตามค่าเริ่มต้น ปลั๊กอิน Gradle จะค้นหาข้อมูลประจำตัวจาก Firebase CLI หากไม่มีการใช้วิธีตรวจสอบสิทธิ์อื่น
การรับรองความถูกต้องด้วยบัญชีบริการช่วยให้คุณใช้ปลั๊กอินกับระบบการผสานรวมอย่างต่อเนื่อง (CI) ได้อย่างยืดหยุ่น มีสองวิธีในการให้ข้อมูลรับรองบัญชีบริการ:
- ส่งไฟล์รหัสบัญชีบริการของคุณไปที่
build.gradle
คุณอาจพบว่าวิธีนี้สะดวกหากคุณมีไฟล์คีย์บัญชีบริการในสภาพแวดล้อมบิลด์ของคุณแล้ว - ตั้งค่าตัวแปรสภาพแวดล้อม
GOOGLE_APPLICATION_CREDENTIALS
ให้ชี้ไปที่ไฟล์คีย์บัญชีบริการของคุณ คุณอาจชอบวิธีนี้หากคุณกำหนดค่า Application Default Credentials (ADC) สำหรับบริการอื่นของ Google แล้ว (เช่น Google Cloud)
ในการตรวจสอบสิทธิ์โดยใช้ข้อมูลประจำตัวของบัญชีบริการ:
- บน Google Cloud Console เลือกโครงการของคุณและสร้างบัญชีบริการใหม่
- เพิ่มบทบาท ผู้ดูแลระบบการกระจายแอป Firebase
- สร้างคีย์ json ส่วนตัวและย้ายคีย์ไปยังตำแหน่งที่สภาพแวดล้อมการสร้างของคุณสามารถเข้าถึงได้ อย่าลืมเก็บไฟล์นี้ไว้ในที่ที่ปลอดภัย เนื่องจากไฟล์จะให้สิทธิ์ผู้ดูแลระบบในการเข้าถึง App Distribution ในโครงการ Firebase ของคุณ
- ข้ามขั้นตอนนี้หากคุณสร้างแอปหลังวันที่ 20 กันยายน 2019: ในคอนโซล Google APIs ให้เปิดใช้ Firebase App Distribution API เมื่อได้รับแจ้ง ให้เลือกโปรเจ็กต์ที่มีชื่อเดียวกับโปรเจ็กต์ Firebase
ระบุหรือค้นหาข้อมูลบัญชีบริการของคุณ:
- หากต้องการส่ง Gradle รหัสบัญชีบริการของคุณ ในไฟล์
build.gradle
ให้ตั้งค่าคุณสมบัติserviceCredentialsFile
เป็นไฟล์ JSON ของคีย์ส่วนตัว ในการค้นหาข้อมูลประจำตัวของคุณด้วย ADC ให้ตั้งค่าตัวแปรสภาพแวดล้อม
GOOGLE_APPLICATION_CREDENTIALS
เป็นเส้นทางสำหรับไฟล์ JSON คีย์ส่วนตัว ตัวอย่างเช่น:export GOOGLE_APPLICATION_CREDENTIALS=/absolute/path/to/credentials/file.json
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการรับรองความถูกต้องด้วย ADC โปรดอ่าน การให้ข้อมูลประจำตัวแก่แอปพลิเคชันของคุณ
- หากต้องการส่ง Gradle รหัสบัญชีบริการของคุณ ในไฟล์
ดู เข้าสู่ระบบด้วย Firebase CLI สำหรับคำแนะนำเกี่ยวกับวิธีการตรวจสอบสิทธิ์โครงการของคุณ
ขั้นตอนที่ 3 กำหนดค่าคุณสมบัติการกระจายของคุณ
ในไฟล์ Gradle ของ โมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle.kts
หรือ <project>/<app-module>/build.gradle
) กำหนดค่า App Distribution โดยเพิ่มอย่างน้อย หนึ่งส่วน firebaseAppDistribution
ตัวอย่างเช่น หากต้องการแจกจ่ายรุ่น 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
บิลด์ในรูปแบบผลิตภัณฑ์ "สาธิต" และ "เต็มรูปแบบ" ให้ทำตามคำแนะนำเหล่านี้:
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" } } } // ... }
ใช้พารามิเตอร์ต่อไปนี้เพื่อกำหนดค่าการกระจาย:
พารามิเตอร์การสร้างการกระจายแอป | |
---|---|
appId | รหัสแอป Firebase ของแอปของคุณ จำเป็นเฉพาะในกรณีที่คุณไม่ได้ติดตั้งปลั๊กอิน Google Services Gradle คุณสามารถค้นหารหัสแอปได้ในไฟล์ 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" |
stacktrace | พิมพ์ stacktrace สำหรับข้อยกเว้นของผู้ใช้ สิ่งนี้มีประโยชน์เมื่อทำการดีบักปัญหา |
ขั้นตอนที่ 4 แจกจ่ายแอปของคุณให้กับผู้ทดสอบ
สุดท้าย ในการจัดทำแพคเกจแอปทดสอบของคุณและเชิญผู้ทดสอบ ให้สร้างเป้าหมาย
BUILD-VARIANT
และappDistributionUpload BUILD-VARIANT
ด้วย Gradle wrapper ของโปรเจ็กต์ โดยที่ BUILD-VARIANT คือตัวเลือกผลิตภัณฑ์และประเภทบิลด์ที่คุณกำหนดค่าในขั้นตอนก่อนหน้า สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรสชาติของผลิตภัณฑ์ ดู ที่ ตั้งค่าคอนฟิกรุ่นย่อยตัวอย่างเช่น หากต้องการเผยแพร่แอปของคุณโดยใช้เวอร์ชันของรุ่น
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
: หมายเลขโครงการ Firebase ของคุณserviceCredentialsFile
: เส้นทางไปยังไฟล์ข้อมูลรับรองบริการของ Google นี่เป็นอาร์กิวเมนต์เดียวกับที่ใช้โดยการดำเนินการอัปโหลด
ปลั๊กอิน Gradle แสดงผลลิงก์ต่อไปนี้หลังจากการอัปโหลดที่เผยแพร่ ลิงก์เหล่านี้ช่วยคุณจัดการไบนารีและช่วยให้แน่ใจว่าผู้ทดสอบและนักพัฒนารายอื่นมีรุ่นที่ถูกต้อง:
-
firebase_console_uri
- ลิงก์ไปยังคอนโซล Firebase ที่แสดงรุ่นเดียว คุณสามารถแชร์ลิงก์นี้กับนักพัฒนาคนอื่นๆ ในองค์กรของคุณ -
testing_uri
- ลิงก์ไปยังรุ่นในประสบการณ์ของผู้ทดสอบ (แอปเนทีฟของ Android) ที่ให้ผู้ทดสอบดูบันทึกประจำรุ่นและติดตั้งแอปลงในอุปกรณ์ของตน ผู้ทดสอบจำเป็นต้องเข้าถึงรุ่นเพื่อใช้ลิงก์ -
binary_download_uri
- ลิงก์ที่ลงชื่อซึ่งดาวน์โหลดและติดตั้งไบนารีของแอปโดยตรง (ไฟล์ APK หรือ AAB) ลิงก์จะหมดอายุหลังจากหนึ่งชั่วโมง
เมื่อคุณแจกจ่ายบิลด์ของคุณ สิ่งนั้นจะพร้อมใช้งานในแดชบอร์ดการกระจายแอปของคอนโซล Firebase เป็นเวลา 150 วัน (ห้าเดือน) เมื่อบิลด์มีอายุ 30 วันนับจากวันหมดอายุ การแจ้งการหมดอายุจะปรากฏทั้งในคอนโซลและรายการบิลด์ของผู้ทดสอบบนอุปกรณ์ทดสอบ
ผู้ทดสอบที่ไม่ได้รับเชิญให้ทดสอบแอปจะได้รับคำเชิญทางอีเมลให้เริ่มต้นใช้งาน และผู้ทดสอบที่มีอยู่จะได้รับการแจ้งเตือนทางอีเมลว่าบิวด์ใหม่พร้อมให้ทดสอบแล้ว (อ่าน คู่มือการตั้งค่าผู้ทดสอบ สำหรับคำแนะนำเกี่ยวกับวิธีติดตั้งแอปทดสอบ) คุณสามารถตรวจสอบสถานะของผู้ทดสอบแต่ละคนว่าพวกเขายอมรับคำเชิญหรือไม่และดาวน์โหลดแอปในคอนโซล Firebase หรือไม่
ผู้ทดสอบมีเวลา 30 วันในการตอบรับคำเชิญให้ทดสอบแอปก่อนที่จะหมดอายุ เมื่อคำเชิญมีอายุ 5 วันนับจากวันหมดอายุ ข้อความแจ้งการหมดอายุจะปรากฏในคอนโซล Firebase ถัดจากผู้ทดสอบในรุ่นที่เผยแพร่ สามารถต่ออายุคำเชิญได้โดยส่งอีกครั้งโดยใช้เมนูแบบเลื่อนลงในแถวผู้ทดสอบ
ขั้นตอนถัดไป
ใช้ ข้อเสนอแนะในแอป เพื่อให้ผู้ทดสอบสามารถส่งความคิดเห็นเกี่ยวกับแอปของคุณ (รวมถึงภาพหน้าจอ) ได้ง่าย
เรียนรู้วิธีแสดง การแจ้งเตือนในแอป แก่ผู้ทดสอบของคุณ เมื่อมีแอปรุ่นใหม่พร้อมให้ติดตั้ง
ไปที่ Codelab ของ Android App Bundle เพื่อเรียนรู้วิธีเผยแพร่ App Bundle ที่เผยแพร่ทีละขั้นตอน
เรียนรู้แนวทางปฏิบัติที่ดีที่สุดใน การแจกจ่ายแอป Android ให้กับผู้ทดสอบ QA โดยใช้ CI/CD