Unity Firebase SetCurrentScreen 必须从主线程调用
Unity Firebase SetCurrentScreen must be called from Main Thread
这很奇怪,我曾经为我的 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");
}
您似乎是从工作线程调用 SetCurrentScreen。您可以通过查看进行调用的线程的名称或将 logcat 中的 TID 与进程 PID 进行比较来检查这一点。主线程的名称 "main" 和与应用程序 PID 匹配的 TID。
Unity SetCurrentScreen 包裹在 Java FirebaseAnalytics.setCurrentScreen() 方法中。
setCurrentScreen 只能从主线程调用。
此要求的原因是 Android 中的活动只能从 UI 线程显示,并且允许工作线程中的 SetCurrentScreen 在显示的 Activity 之间创建竞争条件在 UI 线程中,工作线程执行对 setCurrentScreen 的调用。为避免这种竞争情况,Firebase 要求在 UI 线程上调用 setCurrentScreen。如果您仍然喜欢从工作线程设置屏幕,您可以只调用 runOnUiThread ,尽管这会创建竞争条件,因此某些事件可以归因于错误的屏幕或显示为未记录在任何屏幕上。
https://developers.google.com/tag-manager/android/v4/ua#send-screen-views 这是容器设置。之后你可以登录屏幕:
Firebase.Analytics.FirebaseAnalytics.LogEvent("openScreen", "screenName", "main_screen");
标签设置:
触发器:
变量:
这很奇怪,我曾经为我的 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");
}
您似乎是从工作线程调用 SetCurrentScreen。您可以通过查看进行调用的线程的名称或将 logcat 中的 TID 与进程 PID 进行比较来检查这一点。主线程的名称 "main" 和与应用程序 PID 匹配的 TID。
Unity SetCurrentScreen 包裹在 Java FirebaseAnalytics.setCurrentScreen() 方法中。 setCurrentScreen 只能从主线程调用。
此要求的原因是 Android 中的活动只能从 UI 线程显示,并且允许工作线程中的 SetCurrentScreen 在显示的 Activity 之间创建竞争条件在 UI 线程中,工作线程执行对 setCurrentScreen 的调用。为避免这种竞争情况,Firebase 要求在 UI 线程上调用 setCurrentScreen。如果您仍然喜欢从工作线程设置屏幕,您可以只调用 runOnUiThread ,尽管这会创建竞争条件,因此某些事件可以归因于错误的屏幕或显示为未记录在任何屏幕上。
https://developers.google.com/tag-manager/android/v4/ua#send-screen-views 这是容器设置。之后你可以登录屏幕:
Firebase.Analytics.FirebaseAnalytics.LogEvent("openScreen", "screenName", "main_screen");
标签设置:
触发器:
变量: