【2021年版】FirebaseAnalyticsでのスクリーン計測

2020年末、Firebase Analytics SDKでスクリーン計測の実装方法が変更になり、挙動も変わりました。
今回は、新しいスクリーン計測の実装方法及びその仕様についてまとめたいと思います。

# これまでの実装方法とスクリーン計測の挙動
これまでスクリーン名を設定してスクリーン計測を行う際は、自動のscreen_viewに加えて、iOSでは「setScreenName」、Androidでは「setCurrentScreen」のメソッドを呼び出し、スクリーン名を設定する必要がありました。
ただ、この方法だとスクリーン名が設定されたscreen_viewと、設定されてないscreen_viewが発生することになり、GA4の経路分析レポートなどでは、スクリーンA→(not set)→スクリーンB→(not set)・・・というような悲しいレポートが出来上がっていました。。

# 新しいスクリーン計測の挙動
このようなscreen_viewの重複を起こらないようにし、かつscreen_viewの発生タイミングも制御できるようになりました。
最新のSDKでは、iOSの「setScreenName」、Androidの「setCurrentScreen」は非推奨メソッドとなっていますので、スクリーン名の設定を古いメソッドを使って行っている際には修正する必要があります。

さらに、今まで自動イベントにはカスタムパラメータを付与することはできませんでしたが、この手動で送信するscreen_viewにはカスタムパラメータを付与することができます。
汎用性が高くなって使いやすくなったのではないかと思います。

# 新しい実装方法(Android)
### SDKバージョン
Firebase AnalyticsのSDKのバージョン「17.5.0」以降で有効です。(※悲しいことに、バージョンによっては自動のscreen_viewが止められない事象が発生しており、再度重複するようになっています。。詳細は後述します。)
### Manifestファイルの編集
自動で収集されるscreen_viewを停止するためのmetaタグをマニフェストファイルに追加します。
こちらの内容はFirebaseのヘルプには未記載ですが、これをしないと自動のscreen_viewは止まりません。 
参考：[Firebase Blog:New API for manually tracking screen views in Google Analytics](https://firebase.googleblog.com/2020/08/google-analytics-manual-screen-view.html)

```xml:AndroidManifest.xml
<meta-data android:name="google_analytics_automatic_screen_reporting_enabled"
            android:value="false" />
```
### ソースコード
カスタムイベントを送信する際に利用するlogEventメソッドで送信することができるようになりました。
パラメータにはカスタムパラメータを追加することも可能です。

```java:MainActivity.java
    @Override
    protected void onResume() {
        super.onResume();

        Bundle bundle = new Bundle();
        bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, "MainScreen");
        bundle.putString(FirebaseAnalytics.Param.SCREEN_CLASS, "MainActivity");
        analytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
    }
```


# 新しい実装方法(iOS)
### SDKバージョン
Firebase AnalyticsのSDKのバージョン「6.30.0」以降で有効です。
### info.plistの編集
自動で収集されるscreen_viewを停止するために、info.plistに"FirebaseAutomaticScreenReportingEnabled"、値に"No"を追加します。

```xml:info.plist
    <key>FirebaseAutomaticScreenReportingEnabled</key>
    <false/>
```
### ソースコード
Androidと同じく、iOSもlogEventメソッドで送信します。こちらもカスタムパラメータの付与が可能です。

```swift:MainViewController.swift
override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    Analytics.logEvent(AnalyticsEventScreenView, parameters: [
        AnalyticsParameterScreenName: @"MainScreen",
        AnalyticsParameterScreenClass: @"MainViewController"
    ])
}
```
# バグ情報
AndroidでSDKのバージョン18.0.0~18.0.3あたりで、自動のscreen_viewを停止する設定を入れていても、自動のscreen_viewが計測されるバグが発生していました。
19.0.0では一時的に自動のscreen_viewが停止されるようになりましたが、2021年8月現在再発しており、19.0.0、19.0.1ではまた自動のscreen_viewが計測される事象が確認されています。
[githubのスレッド](https://github.com/firebase/firebase-android-sdk/issues/2225
)で議論が行われており、こちらのスレッドをチェックすると情報をいち早く得ることができそうです。

# 参考
- Firebase Blog：[New API for manually tracking screen views in Google Analytics](https://firebase.googleblog.com/2020/08/google-analytics-manual-screen-view.html)
- github:[Firebase Analytics google_analytics_automatic_screen_reporting_enabled not working](https://github.com/firebase/firebase-android-sdk/issues/2225
)
- Firebaseヘルプ:[画面表示の追跡](https://firebase.google.com/docs/analytics/screenviews?hl=ja#manually_track_screens)

# まとめ
まだ挙動が不安定な部分もありますが、これまでのsetScreenNameを使ったスクリーントラッキングよりは使いやすくなっていると思います。
まだsetScreenNameを利用して計測している場合は、新しい計測方法へ移行されることをお勧めします！