รู้จัก Firebase App Distribution ตั้งแต่ Zero จนเป็น Hero

Jirawatee
Firebase Thailand
7 min readSep 26, 2019

--

Firebase App Distribution อีกหนึ่งบริการใหม่แกะกล่องจากงาน Firebase Summit ที่ช่วยให้คุณส่งแอปทั้ง Android และ iOS ของคุณ ไปยังโทรศัพท์ของ QA หรือ Tester เพื่อติดตั้งได้อย่างง่ายดาย โดยไม่ต้องติดตั้ง SDK ใดๆ แถมมีสถิติให้ดูว่า invite ใครไปบ้าง, ใครตอบรับเป็น tester บ้าง และใครดาวน์โหลดแอปไปแล้วบ้าง

Firebase App Distribution จะช่วยทำให้คุณได้รับ feedback จากการใช้งานของผู้ที่ทดสอบได้รวดเร็วยิ่งขึ้น โดยเฉพาะถ้าคุณใช้ Firebase Crashlytics ในแอปด้วยแล้ว คุณจะได้รับข้อมูล crash ที่เกิดขึ้นระหว่างการทดสอบไปด้วย เพื่อที่คุณจะได้แก้ไขและมั่นใจก่อนนำแอปขึ้น Store

เนื้อหาในบทความนี้จะประกอบไปด้วย
1. วิธีการ Distribute แอป Android ให้ Tester ทดสอบ
2. วิธีการตอบรับเป็น Tester
3. วิธีการสร้างกลุ่ม Tester
4. การสร้างลิงค์สำหรับการ Invite

1. วิธีการ Distribute แอป Android ให้ Tester ทดสอบ

ก่อนจะไปเริ่มกันเราจะต้องมี Firebase Project ซะก่อน หากใครมีแล้วให้ข้ามบทความด้านล่างไป ส่วนใครยังไม่มีให้สร้าง Firebase Project ตามลิงค์ด้านล่างนี้

ถัดมาเราจะต้องเตรียมไฟล์ APK โดยให้ build ออกมาจากโปรเจค Android ที่เราสร้างไว้ในข้อที่ 1 โดยตอน sign ตัว APK จะใช้ debug key หรือ signing key ก็ได้

วิธีการ Distribute แอปให้ Tester ทดสอบสำหรับ Android จะมีด้วยกัน 4 ทางเลือก(เลือกที่ชอบได้เลย) ได้แก่
1.1 การ Distribute แอปผ่าน Firebase Console
1.2 การ Distribute แอปผ่าน Firebase CLI
1.3 การ Distribute แอปผ่าน fastlane
1.4 การ Distribute แอปผ่าน Gradle

1.1 การ Distribute แอปผ่าน Firebase Console

เริ่มจากเปิด Firebase Console ขึ้นมา เมื่อเข้าสู่โปรเจคที่ต้องการ ให้เลือกเมนู App Distribution ทางซ้ายซึ่งอยู่ภายใต้ Quality แล้วเลือกแอปที่เราต้องการจะส่งให้ทดสอบ จากนั้นกดปุ่ม Create your first distribution

เมื่อเข้ามาสู่หน้า App Distribution ทุกคนจะอยู่ที่ Tab ชื่อ Distributions ให้ทำการ Browse ไฟล์ APK ที่เราเตรียมไว้อัพโหลดขึ้นไปโลด

เพิ่มอีเมลของผู้ทดสอบรายบุคคล หรือจะเพิ่มเป็นกลุ่มก็ได้

ใส่ Release notes เพื่ออธิบายสิ่งที่เปลี่ยนแปลงใน APK ชุดนี้ เสร็จแล้วก็กดปุ่ม Distribute สีฟ้าๆได้เลย

เรียบร้อย เราจะเห็นข้อมูลสรุปว่าเราได้ invite ใครไปบ้าง มีใครตอบรับเป็น tester บ้าง และมีใครที่ดาวน์โหลดแอปเวอร์ชันนี้ไปทดสอบแล้วบ้าง ดีย์งาาาม!

ในกรณีเราอัพโหลดไฟล์ APK เวอร์ชันใหม่เข้าไป เราก็จะเห็นและสามารถ track แยกเวอร์ชันกันได้แบบตัวอย่างนี้

1.2 การ Distribute แอปผ่าน Firebase CLI

1.2.1 Setup ตัว Firebase CLI

เริ่มจากดาวน์โหลด Firebase CLI จาก GitHub มาซะก่อน โดยจะมีรองรับทั้ง macOS, Windows และ Linux

ถัดไปให้เรา shell ไปหาไฟล์ firebase-tools-{macos|linux|win.exe} ที่เราโหลดมา จากนั้นก็ให้ใช้คำสั่งด้านล่างนี้เพื่อให้ Firebase CLI ทำงานได้ โดยตัวอย่างของผมเป็น macOs

chmod +x firebase-tools-macos

เปิดใช้งานคำสั่งสำหรับ Firebase App Distribution

./firebase-tools-macos --open-sesame appdistribution

เข้าสู่ระบบด้วย Google Account อันเดียวกันกับที่ใช้ใน Firebase Project

./firebase-tools-macos login

1.2.2 Distribute แอปไปให้ Tester

โดยรันคำสั่ง appdistribution:distribute ตามด้วย path ของ APK และ parameters ดังนี้

  • --app: เป็นการระบุ Firebase App ID ของแอปเรา โดยเราสามารถหาได้จากหน้า General Settings
// ตัวอย่าง
--app 1:1234567890:android:0a1b2c3d4e5f67890
  • --release-notes หรือ --release-notes-file: เป็นการระบุรายละเอียดของการเปลี่ยนแปลงในแอปเวอร์ชันนั้น
// ตัวอย่างกรณีระบุแบบ inline
--release-notes "แก้ไขข้อผิดพลาด"
// ตัวอย่างกรณีเป็นไฟล์ text
--release-notes-file /path/to/release-notes.txt
  • --testers หรือ --testers-file: เป็นการระบุอีเมลของ Tester ซึ่งสามารถมีได้หลายอีเมลโดยการใช้ comma คั่น
// ตัวอย่างกรณีระบุแบบ inline
--testers "firebasethailand@gmail.com, jirawatee@gmail.com"
// ตัวอย่างกรณีระบุแบบไฟล์ text
--testers-file="/path/to/testers.txt"
  • --groups หรือ --groups-file: เป็นการระบุชื่อของกลุ่ม Tester ที่เราได้สร้างไว้ใน Firebase Console ซึ่งสามารถระบุได้หลายกลุ่มโดยใช้ comma คั่น
// ตัวอย่างกรณีระบุแบบ inline
--groups "qa-team, trusted-testers"
// ตัวอย่างกรณีระบุแบบไฟล์ text
--groups-file="/path/to/groups.txt"

มาดูตัวอย่างแบบเต็มๆกันหน่อย

./firebase-tools-macos appdistribution:distribute GDE-v1.0.2.apk --app 1:1234567890:android:0a1b2c3d4e5f67890 --release-notes "Bug fixes and improvements" --testers "jirawatee@gmail.com"
อัพโหลด และ Distribute แอปผ่าน Firebase CLI สำเร็จ
1.0.2 มาพร้อม Release notes แล้วจ้า

1.3 การ Distribute แอปผ่าน fastlane

วิธีนี้เราจะ integrate ตัว Firebase App Distribution เข้าไปใน fastlane ซึ่งเป็น open source platform ที่ช่วยให้เราทำ automate build และ deploy แอป

1.3.1 Setup ตัว fastlane

โดยให้เปิด Terminal ขึ้นมา แล้วลง ตัว Xcode command line tools ด้วยคำสั่ง

xcode-select --install

ถัดไปให้ install ตัว fastlane

# Using RubyGems
sudo gem install fastlane -NV
// หรือ# using Homebrew
brew cask install fastlane

เสร็จแล้วให้เรา shell ไปที่โฟลเดอร์โปรเจค Android ของเรา แล้วทำการ initial ตัว fastlane ด้วยคำสั่ง

fastlane init

จะมีการถามถึง package ของแอปก็ระบุให้ตรงกันลงไป

จากนั้นจะมีการถามถึง path ของ json secret file ก็ไม่ต้องระบุอะไร enter ต่อไป

คำถามต่อมาคือจะอัพโหลด metadata, screentshots ไปยัง Google Play ไหม ก็ตอบไปก่อนว่า n เพราะเราสามารถจัดการได้ในภายหลัง

เมื่อ install ตัว dependencies เสร็จแล้ว เราจะพบว่าในโฟลเดอร์โปรเจคเราจะมี โฟลเดอร์ /fastlane เพิ่มขึ้นมา โดยภายในจะประกอบไปด้วยไฟล์ 2 ไฟล์

  • Appfile: เป็น configuration ของแอป
  • Fastfile: เป็นที่ระบุข้อมูล lanes ต่างๆในการ distribute แอป

1.3.2 Setup ตัว Firebase CLI

ให้เราทำขั้นตอนที่ 1.2.1 เพื่อ setup ตัว Firebase CLI ตั้งแต่ต้นจนถึง เข้าสู่ระบบด้วย Google Account ให้เรียบร้อย

1.3.3 Distribute แอปไปให้ Tester

คราวนี้เรามา setup ตัว fastlane และเจ้า Fastfile ที่ได้จากการ install fastlane ในขั้นตอนที่ผ่านมากันละ โดยให้เราเพิ่ม Firebase App Distribution ใน config ของ fastlane ด้วยคำสั่ง

fastlane add_plugin firebase_app_distribution

หมายเหตุ: ถ้าขั้นตอนนี้มี command prompt มาให้เลือก ก็ให้เลือก Option 3: RubyGems.org ไปนะครับ

เอาหละ ถึงเวลา distribute แอปของเรากันแล้ว โดยให้เราเปิดไฟล์ Fastfile ขึ้นมา แล้วเพิ่ม block ที่ชื่อ firebase_app_distribution {} เข้าไป โดย parameters ภายในจะมีเหมือนข้อ 1.2 ทั้งหมด แต่จะตัด ขีดขีด ออก และมี params เพิ่มมาอีก 2 ตัว คือ

  • firebase_cli_path: Path ของไฟล์ Firebase CLI ที่โหลดมาจาก GitHub
  • apk_path: Path ของไฟล์ APK อาจระบุเป็น path ของไฟล์ APK ในโฟลเดอร์ app/build/outputs/apk ก็ได้นะ
// ตัวอย่าง
platform :android do
desc "My awesome app"
lane :distribute do
firebase_app_distribution(
app: "1:123456789:android:abcd1234",
testers: "firebasethailand@gmail.com, jirawatee@gmail.com",
release_notes: "Lots of amazing new features to test out!",
firebase_cli_path: "./firebase-tools-macos",
apk_path: "./GDE.apk"
)
end
end

พร้อมแล้วก็รันคำสั่ง

fastlane distribute

ถ้าผ่านก็จะเจอบทสรุปแบบนี้

1.4 การ Distribute แอปด้วย Gradle

เราสามารถ integrate ตัว Firebase App Distribution เข้าไปใน build process ของ Android ด้วยการใช้ Gradle plugin

1.4.1 Setup Android Project

โดยเริ่มจากเปิดไฟล์ build.gradle ในระดับ project-level ขึ้นมา แล้วเพิ่ม classpath ด้านล่างนี้ลงไป

buildscript {
repositories {
google()
}
dependencies {
classpath 'com.google.firebase:firebase-appdistribution-
gradle:1.1.0'

}
}

จากนั้นเปิดไฟล์ build.gradle ระดับ app-level ขึ้นมา แล้ว apply ตัว plugin ด้านล่างนี้ลงไป

apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.appdistribution'
// ...

1.4.2 Authenticate

ขั้นตอนนี้เราจะต้องทำการเข้าสู่ระบบด้วยบัญชีที่เราใช้งาน Firebase project ซึ่งจะมีด้วยกัน 3 ทางเลือก

ทางเลือกที่ 1: Authenticate ด้วย Google Account ผ่าน Gradle plugin
เปิด Teminal ใน Android Studio ขึ้นมา แล้วรันคำสั่งด้านล่างนี้

./gradlew appDistributionLogin

เมื่อรันแล้ว Terminal จะ print ลิงค์คืนมาให้ copy ไปเปิดใน browser จากนั้นก็ทำการเข้าสู่ระบบด้วย Google Account ท่ีใช้กับ Firebase project นั้นๆ

เมื่อเข้าสู่ระบบเรียบร้อย Terminal จะ print ค่า Refresh token ออกมา ก็ให้เราเอามาใช้กับคำสั่งถัดไปใน Terminal ของ Android Studio

export FIREBASE_TOKEN=<YOUR-REFRESH-TOKEN>

สำหรับใครที่อยากลองทางเลือกที่ 2 Authenticate ด้วย Service Account
และทางเลือกที่ 3 Authenticate ด้วย Firebase CLI
สามารถกดไปดูวิธีตามลิงค์ได้เลยครับ

1.4.3 ตั้งค่า Distribution Properties

ในไฟล์ build.gradle ระดับ app-level ให้เราเพิ่ม block ที่ชื่อ firebaseAppDistribution ลงไปที่ buildTypes หรือ productFlavors ก็ได้ โดยสามารถระบุ parameters ได้ดังนี้

  • appId: Firebase App ID จะใช้เฉพาะกรณีที่เราไม่มี google services gradle plugin โดยเราสามารถหาได้จากหน้า General Settings
  • serviceCredentialsFile: path ของไฟล์ JSON ซึ่งเป็น service account private key จะใช้เฉพาะกรณีที่เราทำ authentication ด้วย service account
  • releaseNotes หรือ releaseNotesFile: เป็นการระบุรายละเอียดของการเปลี่ยนแปลงในแอปเวอร์ชันนั้น
  • testers หรือ testersFile: เป็นการระบุอีเมลของ Tester ซึ่งสามารถมีได้หลายอีเมลโดยการใช้ comma คั่น
  • groups หรือ groupsFile: เป็นการระบุชื่อของกลุ่ม Tester ที่เราได้สร้างไว้ใน Firebase Console ซึ่งสามารถระบุได้หลายกลุ่มโดยใช้ comma คั่น

ตัวอย่างสำหรับ buildTypes

android {
// ...
buildTypes {
release {
firebaseAppDistribution {
releaseNotesFile="/path/to/releasenotes.txt"
testers="firebasethailand@gmail.com, jirawatee@gmail.com"
}
}
}
// ...
}

ตัวอย่างสำหรับ productFlavors

android {
// ...
flavorDimensions "version"
productFlavors {
demo {
dimension "version"
firebaseAppDistribution {
releaseNotes="Release notes for demo version"
testers="firebase@thailand.com"
}
}
full {
dimension "version"
firebaseAppDistribution {
releaseNotes="Release notes for full version"
testers="jirawatee@gmail.com"
}
}
}
// ...
}

1.4.4 Upload และ Distribute

ให้เราใช้คำสั่ง ./gradlew assembleBUILD-VARIANT appDistributionUploadBUILD-VARIANT โดยเลือก BUILD-VARIANT ให้ตรงกับ variant ที่มี เช่น

./gradlew assembleRelease appDistributionUploadRelease
ถ้าสำเร็จจะเจอหน้าตาประมาณนี้
เรียบร้อยมาแล้วจ้า

2. วิธีการตอบรับเป็น Tester

หลังจากที่มีคน Invite เราให้เข้าไปเป็น Tester จะแยกเป็น 2 กรณี

2.1 กรณีที่ไม่เคยตอบรับการเป็น Tester มาก่อน

ในกรณีนี้เราจะได้รับอีเมลมาหน้าตาประมาณนี้

เมื่อได้เมลแล้วให้เราทำขั้นตอนดังต่อไปนี้

  1. เปิดอีเมลนี้ในโทรศัพท์ของคุณและกดปุ่ม Accept Invitation
  2. เข้าสู่ระบบด้วยอีเมลที่ได้รับเชิญ
  3. ติดตั้งแอปผ่านหน้า Firebase App Distribution
  4. เปิดแอปขึ้นมา แล้วทดสอบได้เลย

หมายเหตุ: คุณจะต้องอนุญาตให้ OS สามารถติดตั้งแอปจากนอก Play Store ได้

2.2 กรณีที่เคยตอบรับการเป็น Tester แล้ว

กรณีนี้จะเกิดขึ้นเมื่อนักพัฒนาได้อัพโหลดไฟล์ APK เวอร์ชันใหม่ของแอปมาให้เรา เราจะได้อีเมลพร้อมกับ Release notes คล้ายๆกับอีเมลแรก แต่สังเกตุดีๆ ปุ่มสีฟ้าไม่เหมือนกันนาจา

3. วิธีการสร้างกลุ่ม Tester

นอกจากเราจะสามารถเพิ่ม Tester ได้เรื่อยๆแล้ว ในความเป็นจริง เราอาจมีกลุ่ม Tester แยกกันตามวัตถุประสงค์ต่างๆเช่น feature หรือ platform ซึ่งทีม Firebase ได้เตรียมความสะดวกในการสร้างกลุ่มให้เราแล้ว โดยเริ่มจากให้เปิด Firebase Console ขึ้นมา จากนั้นไปที่เมนู App Distribution

เลือก Tab ชื่อ Testers แล้วให้กดลิงค์ Add group จากนั้นตั้งชื่อกลุ่มแล้วเพิ่มอีเมลที่ต้องการได้เลย แค่นี้ตอนที่เราจะ distribute แอปตัวใหม่ก็สามารถเลือกกลุ่มของ Tester ที่สร้างนี้ได้แล้ว

4. การสร้างลิงค์สำหรับการ Invite

อีกช่องทางหนึ่งในการ invite คนอื่นมาเป็น Tester สำหรับแอปเรา คือการสร้างลิงค์โดยเริ่มจากให้เปิด Firebase Console ขึ้นมา จากนั้นไปที่เมนู App Distribution

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

เมื่อนำไปส่งให้คนอื่นเปิดลิงค์นั้น จะเจอหน้าตาประมาณนี้

โดยหากอีเมลไม่ตรงกับ domain ที่ระบุไว้ก็จะ Sign up ไม่ได้ด้วย

สรุป

ทีม Mobile app ทั้ง iOS และ Android เป็นทีมที่ต้อง Build และทดสอบแอปกันบ่อยก่อนจะเอาแอปขึ้น Production เพราะฉะนั้น Firebase App Distribution ก็เป็นตัวเลือกที่ดีมากๆ ในการที่จะช่วยบริหารจัดการ Pre-release แอปทั้ง Alpha และ Beta ในที่เดียว ผ่าน Firebase Console

รวมถึงการส่งแอปไปยังกลุ่มผู้ทดสอบและการติดตั้งก็ง่ายมาก ตาม Track ได้อีกต่างหากว่า invite ใครไปบ้าง ใครตอบรับบ้าง ใครดาวน์โหลดไปลองแล้วบ้าง ผู้ทดสอบเองก็สามารถส่ง Feedback ให้นักพัฒนาได้ด้วย โดยเฉพาะใครติด Crashlytics ก็จะได้ข้อมูล Inisight ของ pre-release app ด้วย

ดีขนาดนี้จะซื้อไหม? คำตอบคือไม่ต้องซื้อจ้า ทีม Firebase เขาให้ไปใช้ฟรีๆเลย รอรัยหละ ใช้เลย! แล้วพบกันใหม่บทความหน้า ราตรีสวัสดิ์นักพัฒนาชาวไทย

--

--

Jirawatee
Firebase Thailand

Technology Evangelist at LINE Thailand / Google Developer Expert in Firebase