ベータ版ですが使えるようになった
Firebase App Distribution のテスターからのフィードバック機能を試してみました。
2023-03-06 のリリースノートに新機能として記載されています:
ベータ版なのでこの内容は変わるかもしれません。2023年5月現在の内容です。
セットアップ
公式のガイドに沿ってセットアップしてみます。
まず、app/build.gradle(.kts)
に依存を追加します。超簡単です:
// API のみのライブラリ
implementation("com.google.firebase:firebase-appdistribution-api-ktx:16.0.0-beta08")
// SDK の完全な実装(オプション)
// これはフィードバックが必要なベータ版のビルドバリアントにのみ依存に含めるようにします。
betaImplementation("com.google.firebase:firebase-appdistribution:16.0.0-beta08")
BoM には含まれていなさそうで Could not find com.google.firebase:firebase-appdistribution-api-ktx:.
となるので直接バージョンを指定しています。
さて、ここでポイントなのが、「API のみのライブラリ」のほうと「SDK の完全な実装」の 2 つがあり、
「SDK の完全な実装」はオプションっぽく書かれているので依存は要らないのかな? と思いきや、
そんなことはなくて、これが依存に含まれてない場合はフィードバック機能が起動しません。
コード的にもこの依存がない場合はスタブの空実装が使われるようになっていて、
エラーにはならないけどなにも起こらないようになっています:
/**
* This implementation of the Firebase App Distribution API proxies to the real implementation
* ({@code FirebaseAppDistributionImpl}) provided by the {@code
* com.google.firebase:firebase-appdistribution} artifact. If that artifact is not included in the
* build, then the stubs will return failed {@link Task Tasks}/{@link UpdateTask UpdateTasks} with
* {@link FirebaseAppDistributionException.Status#NOT_IMPLEMENTED}.
*/
public FirebaseAppDistributionProxy(
Provider<FirebaseAppDistribution> firebaseAppDistributionImplProvider) {
FirebaseAppDistribution impl = firebaseAppDistributionImplProvider.get();
delegate = impl != null ? impl : new FirebaseAppDistributionStub();
}
したがって、「SDK の完全な実装」については、
ベータのフィードバックが必要なビルドバリアントでだけ含まれるようにしておけば、
「API」がすべてに含まれていて呼出されても動かなくて大丈夫という仕組みになっているようです。
(プロダクションのビルドに API だけとはいえ入ってるのは気持ちが悪いと感じもしますが、
MainActivity#onCreate
でフィードバック通知を立ち上げるユースケースが多いので、
そのあたりを何も考えずにできるようにおもてなしがされているのでしょうか)
準備
なにより先に Firebase App Testers の API をダッシュボードから有効にしておきます:
次に、App Distribution に配布前に
ローカルで動作確認するときはデバッグモードを有効にしておく必要があります:
adb shell setprop debug.firebase.appdistro.devmode true
実際にフィードバックを送るときはこれは無効じゃないと
送れなくなってしまうので false
に戻しておきます。
実装
実際にお手軽なくみこみフィードバック通知を試してみます。
まず、MainActivity#onCreate
でフィードバック通知を表示するようにします:
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Firebase.appDistribution.showFeedbackNotification(
"みんなフィードバック送ってね!",
InterruptionLevel.HIGH,
)
// ...
}
}
あとは通知の権限が要るので android.permission.POST_NOTIFICATIONS
の処理を追加します:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<application></application>
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission(),
) {
if (it) {
showFeedbackNotification()
}
}
private fun checkPermissions() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) return
if (
ContextCompat.checkSelfPermission(
this,
Manifest.permission.POST_NOTIFICATIONS,
) != PackageManager.PERMISSION_GRANTED
) {
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
これでビルドして動作を確認してみましょう!
(実際にフィードバックを送るときは Firebase App Distribution にアップロードしましょう!)
動き
表示してみた感じはこうなります:
InterruptionLevel.HIGH
なのでヘッドアップ通知になっていますが、
showFeedbackNotifcation
の引数で指定したレベルの通知で表示できます。
システムの言語によって文言は変化します:
それをタップすると、初回は Google アカウントへのログインが求められました。
対象の App の Firebase App Distribution への権限のないアカウントでは続行できませんので、
事前にテスターとして追加しておくようにします:
ログインして権限があることが認証されると、
フィードバックの Activity
が起動してフィードバックを書けるようになります。
ルックスはまあまあ素朴すぎる感じもしますね。
上から、フィードバック入力欄がまずあります。
ここに肝腎要のフィードバックを書き込むことができます:
最初どこが入力欄かわからなかったのですがここでした。
中間にはさっき表示していた画面のスクリーンショットが撮られています。
GALLERY
ボタンを押すと、文字通りギャラリーアプリが起動して任意の画像を選択できます:
スクリーンショットのチェックを外すと、
スクリーンショットを含まない選択もできるようですね:
一番下にはさっきコードで指定したユーザー向けのメッセージがここに表示されています。
てっきり通知のメッセージだと思ったらここだったのですね、という感じです:
右上の送信ボタンを押すとフィードバックを送信できます:
送信されたフィードバックはコンソールから確認できます:
フィードバックはほかにメールでも受け取れるし、
Firebase Cloud Functions で任意の関数をトリガーして
別のサービスにフォワードすることも可能そうです。
この辺はやり方しだいで柔軟に使えそうですね。
(まだ試してないので推測です! 試してみたい)
所感
まず、通知のフィードバックの実装はとても簡単でよさそうですよね。
そのほかにも Firebase.appDistribution.startFeedback
を実行することで、
アプリケーション側の任意のタイミングでフィードバックを開始することもできます。
サンプルにはスクショを撮ったらフィードバックを起動するコードもあり、
工夫次第でアプリにあったかたちでフィードバックを送るカスタマイズもできそうです:
しかしながら、フィードバックのプレースホルダというか、
テンプレートを指定して起動できないのはちょっと残念ですね……。
ここにチームにあった入力フォーマットのテンプレみたいな運用もできると
より便利になりそうだな〜と感じました。
たとえば、アカウントの ID とかそういうのを
App 側からフィードバックコメントに含めておけたりしても便利ですよね。
ベータ版なのでこれからそういうのもできるようになりそうで、
今後のますますの発展に期待ですね。以上です。