这是奇怪的,我曾经为我的Unity项目做过GoogleAnalytics,因为我有两个主要用途,一个用于查看屏幕上的用户数量,另一个用于某些事件。我听说Firebase并想要探索它,我成功地初始化了sdk并记录了不同的事件,但是现在有一个我无法克服的重大问题。显然当我尝试使用以下方式记录当前屏幕时
Firebase.Analytics.FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu");
然后在某处阅读以使用它:
FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu");
在Monitor(ddms)
中查看时,这两个函数都给出了相同的错误SetCurrentScreen must be called from Main Thread
每当我调用这个功能时,我都不知道为什么会这样,并且无法在任何地方找到解决方案。
调用方法的函数是:
public void AnalyticsLogScreen() {
// Log an event with a float.
DebugLog("Logging a Screen");
Firebase.Analytics.FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu");
}
答案 0 :(得分:2)
您似乎正在从工作线程调用SetCurrentScreen。您可以通过查看进行调用的线程的名称或将logcat中的TID与进程PID进行比较来检查。主线程的名称为" main"和应用程序PID匹配的TID。
Unity SetCurrentScreen包含在Java FirebaseAnalytics.setCurrentScreen()方法上。 setCurrentScreen只能从主线程调用。
此要求的原因是Android中的活动只能从UI线程显示,并允许工作线程的SetCurrentScreen在UI线程中显示的Activity和执行setCurrentScreen调用的工作线程之间创建竞争条件。为避免此竞争条件,Firebase需要在UI线程上调用setCurrentScreen。如果您仍然希望从工作线程设置屏幕,则可以调用runOnUiThread,但这会创建竞争条件,因此某些事件可能会归因于错误的屏幕或者不会出现在任何屏幕上。
答案 1 :(得分:1)
https://developers.google.com/tag-manager/android/v4/ua#send-screen-views这是容器设置。之后,您可以登录屏幕:
Firebase.Analytics.FirebaseAnalytics.LogEvent("openScreen", "screenName", "main_screen");
触发器: