เผยแพร่แอป Android ให้ผู้ทดสอบโดยใช้ Gradle


คุณสามารถผสานรวม App Distribution เข้ากับกระบวนการบิลด์ Android ได้โดยใช้ปลั๊กอิน App Distribution Gradle ปลั๊กอินนี้ช่วยให้คุณระบุผู้ทดสอบและหมายเหตุเกี่ยวกับรุ่นในไฟล์ Gradle ของแอปได้ ซึ่งจะช่วยให้คุณกำหนดค่าการเผยแพร่สำหรับบิลด์ประเภทต่างๆ และตัวแปรของแอปได้

คู่มือนี้จะอธิบายวิธีเผยแพร่ Android App Bundle (AAB) ให้ผู้ทดสอบโดยใช้App Distributionปลั๊กอิน Gradle

App Distribution ผสานรวมกับบริการการแชร์แอปภายในของ Google Play เพื่อประมวลผล AAB ที่คุณอัปโหลดและแสดง APK ที่เพิ่มประสิทธิภาพเพื่อการกำหนดค่าอุปกรณ์ของผู้ทดสอบ การเผยแพร่ AAB ช่วยให้คุณทำสิ่งต่อไปนี้ได้

  • เรียกใช้ APK ที่เพิ่มประสิทธิภาพ (ซึ่ง Google Play เป็นผู้ให้บริการ) ที่เพิ่มประสิทธิภาพให้เหมาะกับอุปกรณ์ของผู้ทดสอบ

  • ค้นพบและแก้ไขข้อบกพร่องของปัญหาเฉพาะอุปกรณ์

  • ทดสอบฟีเจอร์ App Bundle เช่น Play Feature Delivery และ Play Asset Delivery

  • ลดขนาดการดาวน์โหลดสำหรับผู้ทดสอบ

สิทธิ์ที่จำเป็น

หากต้องการอัปโหลด AAB ไปยัง App Distribution คุณต้องลิงก์แอป Firebase กับแอปใน Google Play คุณต้องมีสิทธิ์เข้าถึงในระดับที่กำหนดจึงจะดำเนินการเหล่านี้ได้

หากไม่มีสิทธิ์เข้าถึง Firebase ที่จำเป็น โปรดขอให้เจ้าของโปรเจ็กต์ Firebase มอบหมายบทบาทที่เกี่ยวข้องให้คุณผ่านการตั้งค่า IAM ของคอนโซล Firebase หากมีคําถามเกี่ยวกับการเข้าถึงโปรเจ็กต์ Firebase รวมถึงการค้นหาหรือมอบหมายเจ้าของ โปรดดูคําถามที่พบบ่อยเกี่ยวกับ"สิทธิ์และการเข้าถึงโปรเจ็กต์ Firebase"

ตารางต่อไปนี้ใช้กับการลิงก์แอป Firebase กับแอปใน Google Play รวมถึงการอัปโหลด AAB

การดําเนินการในคอนโซล Firebase สิทธิ์ IAM ที่จําเป็น บทบาท IAM ที่มีสิทธิ์ที่จําเป็นโดยค่าเริ่มต้น บทบาทเพิ่มเติมที่จําเป็น
ลิงก์แอป Firebase กับแอปใน Google Play firebase.playLinks.update บทบาทใดบทบาทหนึ่งต่อไปนี้ เข้าถึงGoogle Playบัญชีนักพัฒนาแอปในฐานะผู้ดูแลระบบ
อัปโหลด AAB ไปยัง App Distribution firebaseappdistro.releases.update บทบาทใดบทบาทหนึ่งต่อไปนี้ ––

ก่อนเริ่มต้น

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้ดำเนินการ เมื่อทำตามเวิร์กโฟลว์นี้เสร็จแล้ว คุณจะมีแอป Firebase Android ในโปรเจ็กต์ Firebase

    หากไม่ได้ใช้ผลิตภัณฑ์ Firebase อื่นๆ คุณก็เพียงแค่สร้างโปรเจ็กต์และลงทะเบียนแอปเท่านั้น หากตัดสินใจที่จะใช้ผลิตภัณฑ์เพิ่มเติม โปรดทําตามขั้นตอนทั้งหมดในเพิ่ม Firebase ลงในโปรเจ็กต์ Android

  2. หากต้องการลิงก์ Firebase กับ Google Play และอัปโหลด AAB โปรดตรวจสอบว่าแอปเป็นไปตามข้อกำหนดต่อไปนี้

    • มีการลงทะเบียนแอปใน Google Play และแอป Firebase บน Android โดยใช้ชื่อแพ็กเกจเดียวกัน

    • แอปใน Google Play มีการตั้งค่าในหน้าแดชบอร์ดของแอปและเผยแพร่ไปยังแทร็ก Google Play แทร็กใดแทร็กหนึ่ง (การทดสอบภายใน การทดสอบแบบปิด การทดสอบแบบเปิด หรือเวอร์ชันที่ใช้งานจริง)

    • การตรวจสอบของแอปใน Google Play เสร็จสมบูรณ์และมีการเผยแพร่แอปแล้ว ระบบจะเผยแพร่แอปหากคอลัมน์สถานะแอปแสดงสถานะใดสถานะหนึ่งต่อไปนี้ ได้แก่ การทดสอบภายใน (ไม่ใช่การทดสอบภายในฉบับร่าง) การทดสอบแบบปิด การทดสอบแบบเปิด หรือเวอร์ชันที่ใช้งานจริง

  3. ลิงก์แอป Firebase บน Android กับบัญชีนักพัฒนาแอป Google Play

    1. ในคอนโซล Firebase ให้ไปที่ การตั้งค่าโปรเจ็กต์ แล้วเลือกแท็บการผสานรวม

    2. ในการ์ด Google Play ให้คลิกลิงก์
      หากคุณลิงก์กับ Google Play อยู่แล้ว ให้คลิกจัดการแทน

    3. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้App Distributionการผสานรวมและเลือกแอป Firebase บน Android ที่จะลิงก์กับ Google Play

    ดูข้อมูลเพิ่มเติมเกี่ยวกับการลิงก์กับ Google Play

ขั้นตอนที่ 1 ตั้งค่าโปรเจ็กต์ Android

  1. ในไฟล์ 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
    }
    
  2. ในไฟล์ 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'
    }
    
  3. หากคุณอยู่หลังพร็อกซีหรือไฟร์วอลล์ของบริษัท ให้เพิ่มพร็อพเพอร์ตี้ระบบ 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 = "AAB"
              releaseNotesFile = "/path/to/releasenotes.txt"
              testers = "ali@example.com, bri@example.com, cal@example.com"
          }
      }
  }

  // ...
}

Groovy

android {

  // ...

  buildTypes {
      release {
          firebaseAppDistribution {
              artifactType="AAB"
              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 คุณดูรหัสแอปได้ในไฟล์ google-services.json หรือในคอนโซล Firebase ใน หน้าการตั้งค่าทั่วไป ค่าในไฟล์ build.gradle จะลบล้างค่าเอาต์พุตจากปลั๊กอิน google-services

appId="1:1234567890:android:321abc456def7890"
serviceCredentialsFile

เส้นทางไปยังไฟล์ JSON คีย์ส่วนตัวของบัญชีบริการ ต้องระบุเฉพาะในกรณีที่ใช้การตรวจสอบสิทธิ์ด้วยบัญชีบริการ

artifactType

ระบุประเภทไฟล์ของแอป ตั้งค่าเป็น "AAB" หรือ "APK" ได้

artifactPath

เส้นทางสัมบูรณ์ไปยังไฟล์ APK หรือ AAB ที่ต้องการอัปโหลด

releaseNotes หรือ releaseNotesFile

บันทึกประจำรุ่นสำหรับบิลด์นี้

คุณสามารถระบุหมายเหตุประจำรุ่นโดยตรงหรือระบุเส้นทางไปยังไฟล์ข้อความธรรมดาก็ได้

testers หรือ testersFile

อีเมลของผู้ทดสอบที่คุณต้องการเผยแพร่บิลด์ให้

คุณสามารถระบุผู้ทดสอบเป็นรายการอีเมลที่คั่นด้วยคอมมา ดังนี้

testers="ali@example.com, bri@example.com, cal@example.com"

หรือจะระบุเส้นทางไปยังไฟล์ที่มีรายการอีเมลที่คั่นด้วยคอมมาก็ได้ โดยทำดังนี้

testersFile="/path/to/testers.txt"
groups หรือ groupsFile

กลุ่มผู้ทดสอบที่คุณต้องการแจกจ่ายบิลด์ให้ (ดูจัดการผู้ทดสอบ) คุณระบุกลุ่มได้โดยใช้อีเมลแทนของกลุ่ม ซึ่งดูได้ในแท็บผู้ทดสอบในคอนโซล FirebaseApp Distribution

คุณสามารถระบุกลุ่มเป็นรายการชื่อแทนกลุ่มที่คั่นด้วยคอมมา ดังนี้

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 เผยแพร่แอปให้ผู้ทดสอบ

  1. สุดท้าย หากต้องการแพ็กเกจแอปทดสอบและเชิญผู้ทดสอบ ให้สร้างเป้าหมาย BUILD-VARIANT และ appDistributionUploadBUILD-VARIANT ด้วย Wrapper ของ Gradle ของโปรเจ็กต์ โดยที่ BUILD-VARIANT คือ Flavor ผลิตภัณฑ์และประเภทบิลด์ที่ไม่บังคับซึ่งคุณกำหนดค่าไว้ในขั้นตอนก่อนหน้า ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรผลิตภัณฑ์ได้ที่หัวข้อกำหนดค่าตัวแปรของบิลด์

    เช่น หากต้องการเผยแพร่แอปโดยใช้ตัวแปรรุ่น release ให้เรียกใช้คำสั่งต่อไปนี้

    ./gradlew bundleRelease appDistributionUploadRelease
    

    หรือหากคุณตรวจสอบสิทธิ์ด้วยบัญชี Google และไม่ได้ระบุข้อมูลเข้าสู่ระบบในไฟล์บิลด์ Gradle ให้ใส่ตัวแปร FIREBASE_TOKEN ดังนี้

    export FIREBASE_TOKEN=1/a1b2c3d4e5f67890
    ./gradlew --stop // Only needed for environment variable changes
    ./gradlew bundleRelease appDistributionUploadRelease
    
  2. นอกจากนี้ คุณยังลบล้างค่าที่ตั้งไว้ในไฟล์ build.gradle ได้โดยส่งอาร์กิวเมนต์บรรทัดคำสั่งในรูปแบบ --<property-name>=<property-value> เช่น

    • วิธีอัปโหลดบิลด์การแก้ไขข้อบกพร่องไปยัง App Distribution

      ./gradlew bundleDebug appDistributionUploadDebug
          --artifactType="AAB"
      
    • วิธีเชิญผู้ทดสอบเพิ่มเติมหรือนำผู้ทดสอบที่มีอยู่ออกจากโปรเจ็กต์ 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) โดยตรง ลิงก์จะหมดอายุใน 1 ชั่วโมง

เมื่อคุณเผยแพร่บิลด์แล้ว บิลด์จะปรากฏในแดชบอร์ดApp Distributionของคอนโซล Firebase เป็นเวลา 150 วัน (5 เดือน) เมื่อบิลด์เหลือเวลาอีก 30 วันจะหมดอายุ ประกาศการหมดอายุจะปรากฏทั้งในคอนโซลและรายการบิลด์ของผู้ทดสอบในอุปกรณ์ทดสอบ

ผู้ทดสอบที่ยังไม่ได้ได้รับเชิญให้ทดสอบแอปจะได้รับคำเชิญทางอีเมลเพื่อเริ่มต้นใช้งาน และผู้ทดสอบปัจจุบันจะได้รับการแจ้งเตือนทางอีเมลว่าบิลด์ใหม่พร้อมให้ทดสอบแล้ว (อ่านคู่มือการตั้งค่าผู้ทดสอบเพื่อดูวิธีการติดตั้งแอปทดสอบ) คุณสามารถตรวจสอบสถานะของผู้ทดสอบแต่ละคนได้ว่ายอมรับคำเชิญหรือไม่และดาวน์โหลดแอปหรือไม่ได้ในคอนโซล Firebase

ผู้ทดสอบมีเวลา 30 วันในการตอบรับคำเชิญให้ทดสอบแอปก่อนที่คำเชิญจะหมดอายุ เมื่อคำเชิญเหลือเวลาอีก 5 วันจะหมดอายุ ประกาศการหมดอายุจะปรากฏในFirebaseคอนโซลข้างผู้ทดสอบในรุ่น คุณต่ออายุคำเชิญได้โดยการส่งคำเชิญอีกครั้งโดยใช้เมนูแบบเลื่อนลงในแถวผู้ทดสอบ

ขั้นตอนถัดไป