Search code examples
firebaseswiftuifirebase-analytics

Using Firebase Analytics with SwiftUI


I recently installed Firebase Analytics in my SwiftUI app. Everything works great except the automatic screen views. Am I obligated to call AnalyticsEventScreenView for every view I would like to track?


Solution

  • Yes - due to the way SwiftUI views are structured, Analytics only sees NotifyingMulticolumnSplitViewController.

    You'll have to send screen views manually (as stated in the docs), like this:

    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()
      }
    }
    
    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()
      }
    }