必须从主线程调用Unity Firebase SetCurrentScreen

时间:2017-05-23 13:04:26

标签: android firebase unity3d google-analytics firebase-analytics

这是奇怪的,我曾经为我的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");

}

2 个答案:

答案 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");

标记设置: enter image description here

触发器:

enter image description here

Varible: enter image description here