เผยแพร่แอป 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 เป็นการพึ่งพา:

    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.1" apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id("com.google.firebase.appdistribution") version "4.2.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.1' apply false
    
        // Add the dependency for the App Distribution Gradle plugin
        id 'com.google.firebase.appdistribution' version '4.2.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

ก่อนที่คุณจะสามารถใช้ปลั๊กอิน Gradle ได้ คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ของคุณก่อนด้วยวิธีใดวิธีหนึ่งต่อไปนี้ ตามค่าเริ่มต้น ปลั๊กอิน 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 = "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"
          }
      }
  }

  // ...
}

ใช้พารามิเตอร์ต่อไปนี้เพื่อกำหนดค่าการกระจาย:

พารามิเตอร์บิลด์การเผยแพร่แอป
appId

รหัสแอป Firebase ของแอปของคุณ จำเป็นเฉพาะในกรณีที่คุณไม่ได้ติดตั้งปลั๊กอิน Google Services Gradle คุณสามารถค้นหารหัสแอปได้ในไฟล์ 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

กลุ่มผู้ทดสอบที่คุณต้องการแจกจ่ายบิลด์ให้ (ดู จัดการผู้ทดสอบ ) มีการระบุกลุ่มโดยใช้ นามแฝงของกลุ่ม ซึ่งคุณจะพบได้ในแท็บ ผู้ทดสอบ ในคอนโซล Firebase App 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

พิมพ์ stacktrace สำหรับข้อยกเว้นของผู้ใช้ สิ่งนี้มีประโยชน์เมื่อทำการดีบักปัญหา

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

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

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

    ./gradlew bundleRelease appDistributionUploadRelease
    

    หรือหากคุณตรวจสอบสิทธิ์กับ บัญชี Google ของคุณและไม่ได้ระบุข้อมูลรับรองในไฟล์ Gradle build ให้รวมตัวแปร 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) ลิงก์จะหมดอายุหลังจากหนึ่งชั่วโมง

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

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

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

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