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


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

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

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

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

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

  • ทดสอบฟีเจอร์ App Bundle เช่น การนำส่งฟีเจอร์ Play และการนำส่งเนื้อหา Play

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

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

หากต้องการอัปโหลด 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 หากยังไม่ได้เพิ่ม เมื่อสิ้นสุดเวิร์กโฟลว์นี้ คุณจะมีแอป Android ของ Firebase ในโปรเจ็กต์ Firebase

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

  2. เปิดหน้า App Distribution ของคอนโซล Firebase เลือกโปรเจ็กต์ Firebase เมื่อได้รับข้อความแจ้ง เลือกแอปโดยใช้ฟีเจอร์สลับแอป แล้วคลิกเริ่มต้นใช้งาน

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

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

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

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

  4. ลิงก์แอป Android ใน Firebase กับบัญชีนักพัฒนาแอป Google Play โดยทำดังนี้

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

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

    3. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้การผสานรวม App Distribution และเลือกแอป Android ของ Firebase ที่จะลิงก์กับ 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.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
    }
  2. ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยปกติคือ <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มปลั๊กอิน Gradle ของ App Distribution ดังนี้

    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

ก่อนที่จะใช้ปลั๊กอิน 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 = "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

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

Absolute Path ไปยังไฟล์ 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

อุปกรณ์ทดสอบที่คุณต้องการเรียกใช้การทดสอบเอเจนต์ 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

บักเก็ต Google Cloud Storage (GCS) ที่กำหนดเองซึ่งใช้จัดเก็บผลการทดสอบ หากเว้นว่างไว้ ระบบจะใช้ที่เก็บข้อมูลเริ่มต้น โปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงินต้องเป็นเจ้าของที่เก็บข้อมูล และการระบุที่เก็บข้อมูลจะส่งผลให้มีการเรียกเก็บเงินสำหรับพื้นที่เก็บข้อมูลที่ใช้

stacktrace

พิมพ์ Stacktrace สำหรับข้อยกเว้นของผู้ใช้ ซึ่งจะเป็นประโยชน์เมื่อแก้ไขข้อบกพร่อง

ขั้นตอนที่ 4 เผยแพร่แอปให้ผู้ทดสอบ

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

    เช่น หากต้องการเผยแพร่แอปโดยใช้ตัวแปรบิลด์ 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 ข้างผู้ทดสอบในรุ่น คุณสามารถต่ออายุคำเชิญได้โดยส่งคำเชิญอีกครั้งโดยใช้เมนูแบบเลื่อนลงในแถวผู้ทดสอบ

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