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

คู่มือนี้อธิบายวิธีเผยแพร่บิลด์ AAB ให้กับผู้ทดสอบโดยใช้ fastlane ซึ่งเป็นแพลตฟอร์มโอเพนซอร์สที่ทําให้การสร้างและเผยแพร่แอป iOS และ Android เป็นแบบอัตโนมัติ โดยทำตามวิธีการง่ายๆ ที่ระบุไว้ใน Fastfile หลังจากที่ตั้งค่า Fastlane และ Fastfile แล้ว คุณจะผสานรวม App Distribution กับการกำหนดค่า Fastlane ได้

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ขั้นตอนที่ 1 ตั้งค่า Fastlane

  1. ติดตั้งและตั้งค่า Fastlane

  2. หากต้องการเพิ่ม App Distribution ลงในการกำหนดค่า Fastlane ให้เรียกใช้คำสั่งต่อไปนี้จากรูทของโปรเจ็กต์ Android

    fastlane add_plugin firebase_app_distribution

    หากคำสั่งแสดงตัวเลือกให้คุณ ให้เลือก Option 3: RubyGems.org

ขั้นตอนที่ 2 ตรวจสอบสิทธิ์ด้วย Firebase

ก่อนที่จะใช้ปลั๊กอิน Fastlane ได้ คุณต้องตรวจสอบสิทธิ์กับโปรเจ็กต์ Firebase ด้วยวิธีใดวิธีหนึ่งต่อไปนี้ โดยค่าเริ่มต้น ปลั๊กอิน Fastlane จะมองหาข้อมูลเข้าสู่ระบบจาก Firebase CLI หากไม่มีการใช้วิธีการตรวจสอบสิทธิ์อื่น

ขั้นตอนที่ 3 ตั้งค่า Fastfile และเผยแพร่แอป

  1. ในเลน ./fastlane/Fastfile ให้เพิ่มบล็อก firebase_app_distribution ใช้พารามิเตอร์ต่อไปนี้เพื่อกำหนดค่าการกระจาย
    พารามิเตอร์ firebase_app_distribution
    app

    ต้องระบุ: รหัสแอป Firebase ของแอป คุณดูรหัสแอปได้ในคอนโซล Firebase ในหน้าการตั้งค่าทั่วไป

    app: "1:1234567890:android:0a1b2c3d4e5f67890"
    firebase_cli_token

    โทเค็นการรีเฟรชที่พิมพ์เมื่อตรวจสอบสิทธิ์สภาพแวดล้อม CI ด้วย Firebase CLI (อ่านข้อมูลเพิ่มเติมในใช้ CLI กับระบบ CI)

    service_credentials_file

    เส้นทางไปยังไฟล์ JSON ของบัญชีบริการ Google ดูวิธีตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการด้านบน

    android_artifact_type

    ระบุประเภทไฟล์ Android (APK หรือ AAB)

    android_artifact_path

    แทนที่ apk_path (เลิกใช้งานแล้ว) เส้นทางสัมบูรณ์ไปยังไฟล์ APK หรือ AAB ที่ต้องการอัปโหลด หากไม่ได้ระบุ Fastlane จะระบุตำแหน่งของไฟล์จากเลนที่สร้างไฟล์

    release_notes
    release_notes_file

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

    คุณสามารถระบุบันทึกประจำรุ่นได้โดยตรง โดยทำดังนี้

    release_notes: "Text of release notes"

    หรือระบุเส้นทางไปยังไฟล์ข้อความธรรมดา

    release_notes_file: "/path/to/release-notes.txt"
    testers
    testers_file

    อีเมลของผู้ทดสอบที่คุณต้องการเชิญ

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

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

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

    testers_file: "/path/to/testers.txt"
    groups
    groups_file

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

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

    groups: "qa-team, trusted-testers"

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

    groups_file: "/path/to/groups.txt"
    test_devices
    test_devices_file

    ประเภทการเผยแพร่ต่อไปนี้เป็นส่วนหนึ่งของฟีเจอร์เวอร์ชันเบต้าของผู้ทดสอบอัตโนมัติ

    อุปกรณ์ทดสอบที่คุณต้องการเผยแพร่บิลด์ (ดูการทดสอบอัตโนมัติ)

    คุณระบุอุปกรณ์ทดสอบเป็นรายการอุปกรณ์ทดสอบที่คั่นด้วยเครื่องหมายอัฒภาคได้ ดังนี้

    test_devices: "model=shiba,version=34,locale=en,orientation=portrait;model=b0q,version=33,locale=en,orientation=portrait"

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

    test_devices_file: "/path/to/test-devices.txt"
    test_username

    ชื่อผู้ใช้สำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบอัตโนมัติ

    test_password
    test_password_file

    รหัสผ่านสำหรับการเข้าสู่ระบบอัตโนมัติที่จะใช้ระหว่างการทดสอบอัตโนมัติ

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

    test_password_file: "/path/to/test-password.txt"
    test_username_resource

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

    test_password_resource

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

    test_non_blocking

    เรียกใช้การทดสอบอัตโนมัติแบบไม่พร้อมกัน ไปที่คอนโซล Firebase เพื่อดูผลการทดสอบอัตโนมัติ

    debug

    แฟล็กบูลีน คุณสามารถตั้งค่านี้เป็น true เพื่อพิมพ์ผลลัพธ์การแก้ไขข้อบกพร่องแบบละเอียด

platform :android do
    desc "My awesome app"
    lane :distribute do
        build_android_app(task: "bundle", ...)
        # build_android_app is a built-in fastlane action.
        release = firebase_app_distribution(
            app: "1:123456789:android:abcd1234",
            testers: "tester1@company.com, tester2@company.com",
            release_notes: "Lots of amazing new features to test out!",
            android_artifact_type: "AAB"
        )
    end
end

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

fastlane <lane>

ค่าที่ได้ของการดำเนินการคือแฮชที่แสดงถึงผลงานที่อัปโหลด คุณใช้แฮชนี้ได้โดยใช้ lane_context[SharedValues::FIREBASE_APP_DISTRO_RELEASE] โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับช่องที่ใช้ได้ในแฮชนี้ที่เอกสารประกอบของ REST API

ปลั๊กอิน Fastlane จะแสดงลิงก์ต่อไปนี้หลังจากการอัปโหลดรุ่น ลิงก์เหล่านี้ช่วยคุณจัดการไบนารีและดูแลให้ผู้ทดสอบและนักพัฒนาซอฟต์แวร์คนอื่นๆ มีรุ่นที่ถูกต้อง

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

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

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

(ไม่บังคับ) หากต้องการเพิ่มหมายเลขบิลด์โดยอัตโนมัติทุกครั้งที่คุณสร้างรุ่นใหม่ใน App Distribution คุณสามารถใช้การดำเนินการ firebase_app_distribution_get_latest_release และปลั๊กอิน Fastlane increment_version_code เป็นต้น โค้ดต่อไปนี้แสดงตัวอย่างวิธีเพิ่มหมายเลขบิลด์โดยอัตโนมัติ

lane :increment_version do
  latest_release = firebase_app_distribution_get_latest_release(
    app: "<your Firebase app ID>"
  )
  increment_version_code({ version_code: latest_release[:buildVersion].to_i + 1 })
end

ดูข้อมูลเพิ่มเติมเกี่ยวกับการดำเนินการ firebase_app_distribution_get_latest_release ได้ที่รับข้อมูลเกี่ยวกับรุ่นล่าสุดของแอป

ขั้นตอนที่ 4 (ไม่บังคับ) การจัดการผู้ทดสอบสำหรับการเผยแพร่

คุณเพิ่มและนำผู้ทดสอบออกจากโปรเจ็กต์หรือกลุ่มได้โดยใช้ไฟล์ Fastfile หรือเรียกใช้การดำเนินการ Fastlane โดยตรงก็ได้ การดำเนินการจะทำงานจะลบล้างค่าที่ตั้งไว้ใน Fastfile โดยตรง

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

หากมีผู้ทดสอบจำนวนมาก คุณควรพิจารณาใช้กลุ่ม

ใช้ Fastfile

# Use lanes to add or remove testers from a project.
lane(:add_testers) do
  firebase_app_distribution_add_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) add testers to this group
  )
end

lane(:remove_testers) do
  firebase_app_distribution_remove_testers(
    emails: "foo@google.com,bar@google.com"
    # or file: "/path/to/testers.txt"
    group_alias: "qa-team" # (Optional) remove testers from this group only
  )
end
# Add or remove testers with the terminal
$ fastlane add_testers
$ fastlane remove_testers

เรียกใช้การดำเนินการ Fastlane

fastlane run firebase_app_distribution_create_group display_name:"QA Team" alias:"qa-team"
fastlane run firebase_app_distribution_add_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_remove_testers group_alias:"qa-team" emails:"foo@google.com,bar@google.com"
fastlane run firebase_app_distribution_delete_group alias:"qa-team"

คุณยังระบุผู้ทดสอบโดยใช้ --file="/path/to/testers.txt แทน --emails ได้ด้วย

งาน firebase_app_distribution_add_testers และ firebase_app_distribution_remove_testers ยังยอมรับอาร์กิวเมนต์ต่อไปนี้ด้วย

  • project_name: หมายเลขโปรเจ็กต์ Firebase
  • group_alias (ไม่บังคับ): หากระบุไว้ ระบบจะเพิ่มผู้ทดสอบลงในกลุ่มที่ระบุ (หรือนำออกจาก)
  • service_credentials_file: เส้นทางไปยังไฟล์ข้อมูลเข้าสู่ระบบบริการของ Google
  • firebase_cli_token: โทเค็นการตรวจสอบสิทธิ์สำหรับ Firebase CLI

service_credentials_file และ firebase_cli_token เป็นอาร์กิวเมนต์เดียวกันกับที่การดำเนินการอัปโหลดใช้

ขั้นตอนที่ 5 (ไม่บังคับ) รับข้อมูลเกี่ยวกับแอปรุ่นล่าสุด

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

ค่าที่ได้ของการดำเนินการคือแฮชที่แสดงถึงรุ่นล่าสุด คุณใช้แฮชนี้ได้โดยใช้ lane_context[SharedValues::FIREBASE_APP_DISTRO_LATEST_RELEASE] โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับช่องที่ใช้ได้ในแฮชนี้ที่เอกสารประกอบของ REST API

พารามิเตอร์

พารามิเตอร์ firebase_app_distribution_get_latest_release
app

ต้องระบุ: รหัสแอป Firebase ของแอป คุณดูรหัสแอปได้ในคอนโซล Firebase ในหน้าการตั้งค่าทั่วไป

app: "1:1234567890:android:0a1b2c3d4e5f67890"
firebase_cli_token

โทเค็นการรีเฟรชที่พิมพ์เมื่อตรวจสอบสิทธิ์สภาพแวดล้อม CI ด้วย Firebase CLI (อ่านข้อมูลเพิ่มเติมในใช้ CLI กับระบบ CI)

service_credentials_file

เส้นทางไปยังไฟล์ JSON ของบัญชีบริการ Google ดูวิธีตรวจสอบสิทธิ์โดยใช้ข้อมูลเข้าสู่ระบบของบัญชีบริการด้านบน

debug

แฟล็กบูลีน คุณสามารถตั้งค่านี้เป็น true เพื่อพิมพ์ผลลัพธ์การแก้ไขข้อบกพร่องแบบละเอียด

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