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


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

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. วิธีลิงก์แอป Android ใน Firebase กับบัญชีนักพัฒนาแอป Google Play

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

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

    3. ทำตามวิธีการบนหน้าจอเพื่อเปิดใช้App Distributionการผสานรวมและเลือกแอป Firebase บน Android ที่จะลิงก์กับ 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 หรือไม่

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

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

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

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