#firebase #swiftui #firebase-analytics
#firebase #swiftui #firebase-аналитика
Вопрос:
Недавно я установил Firebase Analytics в свое приложение SwiftUI. Все работает отлично, кроме автоматического просмотра экрана. Обязан ли я вызывать AnalyticsEventScreenView для каждого представления, которое я хотел бы отслеживать?
Ответ №1:
Да — из-за того, как структурированы представления SwiftUI, аналитика видит только 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()
}
}
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()
}
}
Комментарии:
1. Спасибо за ответ! Я читал в документах, касающихся аналитики, в поисках подчеркивающего UIViewController, но хотел спросить, чтобы убедиться, что я ничего не пропустил. Ручной вызов AnalyticsEventScreenView отлично работает.
Ответ №2:
Тот же ответ Питера, но автоматически генерирующий идентификаторы
import SwiftUI
import Firebase
struct OneView: View {
var body: some View {
Text("1")
.onAppear() {
Analytics.logEvent(AnalyticsEventScreenView,
parameters: [AnalyticsParameterScreenName: "(type(of: self))",
AnalyticsParameterScreenClass: "(type(of: self))"])
}
}
}
struct OneView_Previews: PreviewProvider {
static var previews: some View {
OneView()
}
}