您可以使用選用的 Firebase App Distribution iOS 和 Android SDK,在應用程式推出新版本可供安裝時,向測試人員顯示應用程式內快訊。本指南說明如何使用 App Distribution iOS 和 Android SDK,為測試人員建立及自訂新的建構警示。
事前準備
如果您尚未將 Firebase 新增至 Android 專案,請新增 Firebase。
步驟 1:啟用 App Distribution Tester API
在 Google Cloud 控制台中選取專案。
在「Firebase App Testers API」下方,按一下「啟用」。
步驟 2:將 App Distribution 新增至應用程式
App Distribution Android SDK 包含兩個程式庫:
firebase-appdistribution-api
:API 專用程式庫,可納入所有建構變化版本。firebase-appdistribution
- 完整的 SDK 實作 (選用)。
API 專用程式庫可讓程式碼呼叫 SDK。如果沒有完整的 SDK 實作,這些呼叫將不會產生任何影響。
在模組 (應用程式層級) Gradle 檔案 (通常為 <project>/<app-module>/build.gradle.kts
或 <project>/<app-module>/build.gradle
) 中宣告 App Distribution Android SDK 的依附元件。為避免在 Play 版本中納入完整 SDK 實作的自動更新功能,請將 API 專屬程式庫依附元件新增至所有版本變化版本。請只將完整 SDK 實作項目加入專門用於預先發布測試的變化版本。
dependencies {
// ADD the API-only library to all variants
implementation("com.google.firebase:firebase-appdistribution-api:16.0.0-beta14")
// ADD the full SDK implementation to the "beta" variant only (example)
betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta14")
}
想尋找 Kotlin 專屬的程式庫模組嗎?自 2023 年 10 月發布版本起,Kotlin 和 Java 開發人員皆可依附主要程式庫模組 (詳情請參閱這項計畫的常見問題)。
步驟 3:設定應用程式內警報
App Distribution Android SDK 提供下列方式,讓您為測試人員設定應用程式內建構快訊:
- 基本快訊設定,可搭配預先建構的應用程式更新和登入對話方塊,向測試人員顯示。
- 進階警示設定,可讓您自訂自己的使用者介面。
如果您是首次使用 App Distribution Android SDK,建議您使用基本設定。
基本設定
使用 updateIfNewReleaseAvailable
向尚未啟用快訊的測試人員顯示預先建構的啟用快訊對話方塊,然後檢查是否有可用的新版本。呼叫時,方法會執行以下序列:
檢查測試人員是否已啟用快訊。如果測試人員尚未啟用快訊,這個方法會提示測試人員使用 Google 帳戶登入 App Distribution。
檢查測試人員可安裝的新建構版本。
顯示預先建構的快訊,提示測試人員更新。
如果新版本是 Android App Bundle (AAB),請將測試人員重新導向至 Google Play,以完成更新程序。
如果新版本是 Android 應用程式套件 (APK),SDK 會在背景下載新版本,並在下載完成時提示測試人員進行安裝。SDK 會使用
NotificationManager
向使用者傳送下載進度通知。您也可以將onProgressUpdate
處理常式附加至updateIfNewReleaseAvailable
工作,藉此新增自己的進度指標。
您可以在應用程式的任何位置呼叫 updateIfNewReleaseAvailable
。舉例來說,您可以在應用程式主要活動的 onResume
方法中呼叫 updateIfNewReleaseAvailable
。
以下範例會檢查測試人員是否已啟用快訊,以及是否有權存取新版本。如果符合下列條件,系統會在可安裝版本時顯示對話方塊:
Kotlin+KTX
// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
val firebaseAppDistribution = FirebaseAppDistribution.getInstance()
firebaseAppDistribution.updateIfNewReleaseAvailable()
.addOnProgressListener { updateProgress ->
// (Optional) Implement custom progress updates in addition to
// automatic NotificationManager updates.
}
.addOnFailureListener { e ->
// (Optional) Handle errors.
if (e is FirebaseAppDistributionException) {
when (e.errorCode) {
Status.NOT_IMPLEMENTED -> {
// SDK did nothing. This is expected when building for Play.
}
else -> {
// Handle other errors.
}
}
}
}
Java
// Copy and paste this into any part of your app - for example, in your main
// activity's onResume method.
FirebaseAppDistribution firebaseAppDistribution = FirebaseAppDistribution.getInstance();
firebaseAppDistribution.updateIfNewReleaseAvailable()
.addOnProgressListener(updateProgress -> {
// (Optional) Implement custom progress updates in addition to
// automatic NotificationManager updates.
})
.addOnFailureListener(e -> {
// (Optional) Handle errors.
if (e instanceof FirebaseAppDistributionException) {
switch (((FirebaseAppDistributionException)e).getErrorCode()) {
case NOT_IMPLEMENTED:
// SDK did nothing. This is expected when building for Play.
break;
default:
// Handle other errors.
break;
}
}
});
進階設定
進階登入設定
方法 signInTester
和 isTesterSignedIn
可讓您更靈活地自訂測試人員的登入體驗,讓測試人員的體驗更符合應用程式的外觀和風格。
以下範例會檢查測試人員是否已登入 App Distribution 測試人員帳戶。這樣一來,您就可以選擇只向尚未登入的測試人員顯示登入使用者介面 (UI)。測試人員登入後,您可以呼叫 updateIfNewReleaseAvailable
,檢查測試人員是否有權存取新版本。
Kotlin+KTX
// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn) {
// Start your sign-in UI here.
}
// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn) {
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener {
// Handle failed update.
}
}
Java
// Only show sign-in UI if this is the "beta" variant (example).
if (BuildConfig.BUILD_TYPE == "beta" && !firebaseAppDistribution.isTesterSignedIn()) {
// Start your sign-in UI here.
}
// Only check for updates if the tester is already signed in (do not prompt).
if (firebaseAppDistribution.isTesterSignedIn()) {
firebaseAppDistribution.updateIfNewReleaseAvailable().addOnFailureListener( e -> {
// Handle failed update.
});
}
在登入 UI 中,當測試人員選擇繼續時,請呼叫 signInTester()
:
Kotlin+KTX
firebaseAppDistribution.signInTester().addOnSuccessListener {
// Handle successful sign-in.
}.addOnFailureListener {
// Handle failed sign-in.
});
Java
firebaseAppDistribution.signInTester().addOnSuccessListener( unused -> {
// Handle successful sign-in.
}).addOnFailureListener(e -> {
// Handle failed sign-in.
});
進階更新設定
checkForNewRelease
和 updateApp
方法可讓您更靈活地自訂測試人員收到更新提示時的情況。您也可以自訂預先建構的更新對話方塊和下載進度指標,讓這些元素更符合應用程式的外觀和風格。
請注意,updateApp
不會提供下載進度指示。這表示您必須使用 NotificationManager
、某種應用程式內狀態顯示方式或其他方法,實作自己的進度指示。
以下範例會檢查是否有可用的新版本,然後顯示自訂 UI。呼叫 checkForNewRelease
和 updateApp
前,請使用進階登入設定,確認測試人員已登入。
Kotlin+KTX
firebaseAppDistribution.checkForNewRelease().addOnSuccessListener { release ->
if (release != null) {
// New release available. Start your update UI here.
}
}.addOnFailureListener {
// Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
// if built for Play.
}
Java
firebaseAppDistribution.checkForNewRelease().addOnSuccessListener(release -> {
if (release != null) {
// New release available. Start your update UI here.
}
}).addOnFailureListener(e -> {
// Handle failed check for new release. Fails with Status#NOT_IMPLEMENTED
// if built for Play.
});
當測試人員選擇從更新 UI 繼續更新時,請呼叫 updateApp()
:
Kotlin+KTX
firebaseAppDistribution.updateApp()
.addOnProgressListener { updateState ->
// Use updateState to show update progress.
}
Java
firebaseAppDistribution.updateApp()
.addOnProgressListener(updateState -> {
// Use updateState to show update progress.
});
步驟 4:建構及測試實作項目
使用 Firebase 主控台,將版本發布給測試人員,藉此建構應用程式並測試導入方式。
如需常見問題的相關協助,請參閱 App Distribution 疑難排解指南,例如:
- 測試人員未收到應用程式內警示
- 測試人員收到多次 Google 登入提示