Open2

iOS アプリへの Google Analytics(Firebase Analytics)の導入

kamimikamimi

実装時に検討したこと

Q: View を SwiftUI で Firebase Analytics を使用するときに、FirebaseAnalytics と FirebaseAnalyticsSwift のどちらの Product を使用して実装するか?

A: View が Firebase によるログ送信処理を意識せずに済むように(ViewModel 側かもしくはそのクラスの内部で呼ばれている処理に任せられるように)、モディファイアを使用せずに実装できる FirebaseAnalytics を使用する。

Google Analytics(Firebase Analytics) は、SwiftUI 用のモディファイアが用意されている。
それを使用する場合は、FirebaseAnalyticsSwift の Product をインポートして使用する。

https://dev.classmethod.jp/articles/swiftui-firebase-screen-event-not-auto-log/

import FirebaseAnalyticsSwift

struct ProfileView: View {
  var body: some View {
    Text("Profile")
      .analyticsScreen(name: "profile",
                       class: String(describing: type(of: self)))
  }
}

だがこのやり方だと、例えば onAppear の内部で ViewModel クラス側に用意した onAppear()メソッドを呼びたい。かつそのメソッドの内部で、FirebaseAnalytics によるログ送信を行う設計にする場合に困る。

つまり以下のように実装したい場合。

View 側では ViewModel クラスのonAppear() メソッドを呼ぶ。
View は onAppear()メソッドを呼んでいるだけで、ログ送信をしていることは知らない。

SomeView.swift
var body {
    Text("Screen")
        .onAppear {
            viewModel.onAppear()
        }
}

ViewModel クラス側の onAppear() メソッドの内部で、ログ送信処理を行う。

SomeViewModel.swift
func onAppear() {
    sendLog()
}

private func sendLog() {
    // ここで Firebase Analytics のログ送信処理を行う!
    Analytics.logEvent(
          AnalyticsEventScreenView,
          parameters: [
            AnalyticsParameterScreenName: "profile",
            AnalyticsParameterScreenClass: String(describing: type(of: self))
          ]
    )
}
acevifacevif

ありがとうございます。助かりました。

今回は結局.analyticsScreenのほうを使いました。ViewModel抜きの設計を試していきたかったためです。