将 Firebase Analytics 与 SwiftUI 结合使用

Dom*_*Dom 6 firebase firebase-analytics swiftui

我最近在我的 SwiftUI 应用程序中安装了 Firebase Analytics。除了自动屏幕视图之外,一切都运行良好。我是否有义务为我想要跟踪的每个视图调用 AnalyticsEventScreenView?

Pet*_*ese 14

是的 - 由于 SwiftUI 视图的构造方式,Analytics 只能看到NotifyingMulticolumnSplitViewController.

您必须手动发送屏幕视图(如文档中所述),如下所示:

import SwiftUI
import Firebase

struct ContentView: View {
  var body: some View {
    NavigationView {
      List {
        NavigationLink(destination: OneView()) {
          Text("One")
        }
        NavigationLink(destination: TwoView()) {
          Text("Two")
        }
      }
      .navigationTitle("Choose a screen")
      .onAppear() {
        Analytics.logEvent(AnalyticsEventScreenView,
                           parameters: [AnalyticsParameterScreenName: "\(ContentView.self)",
                                        AnalyticsParameterScreenClass: "\(ContentView.self)"])
      }
    }
  }
}

struct ContentView_Previews: PreviewProvider {
  static var previews: some View {
    ContentView()
  }
}
Run Code Online (Sandbox Code Playgroud)
import SwiftUI
import Firebase

struct OneView: View {
  var body: some View {
    Text("1")
      .onAppear() {
        Analytics.logEvent(AnalyticsEventScreenView,
                           parameters: [AnalyticsParameterScreenName: "\(OneView.self)",
                                        AnalyticsParameterScreenClass: "\(OneView.self)"])
      }
  }
}

struct OneView_Previews: PreviewProvider {
  static var previews: some View {
    OneView()
  }
}
Run Code Online (Sandbox Code Playgroud)


coh*_*n72 13

Firebase9.0.0 引入了特定于SwiftUIBeta 版的新 API。现在有一个View扩展实现了ViewModifier为您提供一些功能的:

func analyticsScreen(name: String, 
                     class: String = "View", 
                     extraParameters: [String: Any] = [:])
Run Code Online (Sandbox Code Playgroud)

分析+SwiftUI.swift

例如:

struct MyView: View {
  var body: some View {
    Text("Hey")
       .analyticsScreen(
           name: "Screen Name", 
           extraParameters: [
              AnalyticsParameterScreenName: "\(type(of: self))",
              AnalyticsParameterScreenClass: "\(type(of: self))"
           ]
       )  
   }
}
Run Code Online (Sandbox Code Playgroud)