この記事について
Firebase×SwiftUIで作成されたアプリの場合
どのようにして画面が表示された際に
EventやUserPropertyを送ろうか考えた際に試してみた内容を記事にしてみました。
最後の方におまけとしてこれもできるのかな〜と
と思ったことを試してみたのも添えてありますのでご興味があればぜひ!
ViewのExtensionにAnalytics用のメソッドを追加
Viewのextensionで追加してみる
FirebaseAnalyticsTracker.swift
final class FirebaseAnalyticsTracker {
enum Event: String {
case login
}
func sendEventLog(_ event: Event, parameters: [String: Any] = [:]) {
Analytics.logEvent(event.rawValue, parameters: parameters)
}
enum UserProperty: String {
case level
}
func setUserProperty(key: UserProperty, value: String) {
Analytics.setUserProperty(value, forName: key.rawValue)
}
}
extension View {
func sendEventLog(_ eventName: FirebaseAnalyticsTracker.Event, parameters: [String: Any] = [:]) -> Self {
FirebaseAnalyticsTracker().sendEventLog(eventName, parameters: parameters)
return self
}
func setUserProperty(key: FirebaseAnalyticsTracker.UserProperty, value: String) -> Self {
FirebaseAnalyticsTracker().setUserProperty(key: key, value: value)
return self
}
}
struct FirebaseAnalyticsTestView: View {
var body: some View {
VStack {
Text("Send Analytics Data to Firebase")
}
.sendEventLog(.login)
.setUserProperty(key: .level, value: "5")
}
}
DebugViewで確認
無事loginEventとlevelが5であるというUserPropertyが送れてました![]()

課題
@Stateや@ObservedObjectで変更が通知され
Viewが再描画される際にFirebaseAnalytics用のModifierがある場合余分にEvent,UserPropertyが送信されているようでした。
ここに関しては引き続き検証をしていこうと思っておりますので進捗あり次第更新します![]()
おまけ
Viewにコメント付与,logを出すModifierもできる
extension View {
func comment(_ text: String) -> Self {
return self
}
func log(_ text: String) -> Self {
print(text)
return self
}
}
struct ContentView: View {
var body: some View {
VStack {
Text("Send Analytics Data to Firebase")
.comment("こんな感じでいける")
.log("text")
}
}
}