LoginSignup
1
0

Firebase App Distribution のフィードバック機能を試してみる

Last updated at Posted at 2023-05-22

ベータ版ですが使えるようになった
Firebase App Distribution のテスターからのフィードバック機能を試してみました。

イメージ

2023-03-06 のリリースノートに新機能として記載されています:

ベータ版なのでこの内容は変わるかもしれません。2023年5月現在の内容です。

セットアップ

公式のガイドに沿ってセットアップしてみます。
まず、app/build.gradle(.kts) に依存を追加します。超簡単です:

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 の完全な実装」はオプションっぽく書かれているので依存は要らないのかな? と思いきや、
そんなことはなくて、これが依存に含まれてない場合はフィードバック機能が起動しません。

コード的にもこの依存がない場合はスタブの空実装が使われるようになっていて、
エラーにはならないけどなにも起こらないようになっています:

FirebaseAppDistributionProxy.java
/**
 * 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}.
 */
FirebaseAppDistributionProxy.java
  public FirebaseAppDistributionProxy(
      Provider<FirebaseAppDistribution> firebaseAppDistributionImplProvider) {
    FirebaseAppDistribution impl = firebaseAppDistributionImplProvider.get();
    delegate = impl != null ? impl : new FirebaseAppDistributionStub();
  }

したがって、「SDK の完全な実装」については、
ベータのフィードバックが必要なビルドバリアントでだけ含まれるようにしておけば、
「API」がすべてに含まれていて呼出されても動かなくて大丈夫という仕組みになっているようです。

(プロダクションのビルドに API だけとはいえ入ってるのは気持ちが悪いと感じもしますが、
MainActivity#onCreate でフィードバック通知を立ち上げるユースケースが多いので、
そのあたりを何も考えずにできるようにおもてなしがされているのでしょうか)

準備

なにより先に Firebase App Testers の API をダッシュボードから有効にしておきます:

Firebase App Testers API を有効にする

次に、App Distribution に配布前に
ローカルで動作確認するときはデバッグモードを有効にしておく必要があります:

adb shell setprop debug.firebase.appdistro.devmode true

実際にフィードバックを送るときはこれは無効じゃないと
送れなくなってしまうので false に戻しておきます。

実装

実際にお手軽なくみこみフィードバック通知を試してみます。
まず、MainActivity#onCreate でフィードバック通知を表示するようにします:

MainActivity.kt
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        Firebase.appDistribution.showFeedbackNotification(
            "みんなフィードバック送ってね!",
            InterruptionLevel.HIGH,
        )
        // ...
    }
}

あとは通知の権限が要るので android.permission.POST_NOTIFICATIONS の処理を追加します:

AndroidManifest.xml
<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>
MainActivity.kt
    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 への権限のないアカウントでは続行できませんので、
事前にテスターとして追加しておくようにします:

oops

ログイン完了

ログインして権限があることが認証されると、
フィードバックの Activity が起動してフィードバックを書けるようになります。

フィードバックフォーム

ルックスはまあまあ素朴すぎる感じもしますね。

上から、フィードバック入力欄がまずあります。
ここに肝腎要のフィードバックを書き込むことができます:

入力中のフォーム

最初どこが入力欄かわからなかったのですがここでした。

中間にはさっき表示していた画面のスクリーンショットが撮られています。
GALLERY ボタンを押すと、文字通りギャラリーアプリが起動して任意の画像を選択できます:

スクリーンショット部分

スクリーンショットのチェックを外すと、
スクリーンショットを含まない選択もできるようですね:

スクショなし

一番下にはさっきコードで指定したユーザー向けのメッセージがここに表示されています。
てっきり通知のメッセージだと思ったらここだったのですね、という感じです:

notice

右上の送信ボタンを押すとフィードバックを送信できます:

フィードバックの送信

送信されたフィードバックはコンソールから確認できます:

コンソールでのフィードバック確認

フィードバックはほかにメールでも受け取れるし、
Firebase Cloud Functions で任意の関数をトリガーして
別のサービスにフォワードすることも可能そうです。
この辺はやり方しだいで柔軟に使えそうですね。
(まだ試してないので推測です! 試してみたい)

所感

まず、通知のフィードバックの実装はとても簡単でよさそうですよね。
そのほかにも Firebase.appDistribution.startFeedback を実行することで、
アプリケーション側の任意のタイミングでフィードバックを開始することもできます。

サンプルにはスクショを撮ったらフィードバックを起動するコードもあり、
工夫次第でアプリにあったかたちでフィードバックを送るカスタマイズもできそうです:

しかしながら、フィードバックのプレースホルダというか、
テンプレートを指定して起動できないのはちょっと残念ですね……。

こういうイメージ↓
テンプレートのイメージ

ここにチームにあった入力フォーマットのテンプレみたいな運用もできると
より便利になりそうだな〜と感じました。

たとえば、アカウントの ID とかそういうのを
App 側からフィードバックコメントに含めておけたりしても便利ですよね。

ベータ版なのでこれからそういうのもできるようになりそうで、
今後のますますの発展に期待ですね。以上です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0