在经历了两天的紧张奋斗后,我注意到另一个非常重要的事情: setCurrentScreen
方法必须在UI线程上调用。
只有在查看Firebase反编译代码时才能发现这一点:
@MainThread
@Keep
public final void setCurrentScreen(@NonNull Activity var1, @Size(min = 1L,max = 36L) @Nullable String var2, @Size(min = 1L,max = 36L) @Nullable String var3) {
//...
}
screen_view
的事件。请注意Firebase的大小限制。屏幕名称的最大长度为36个字符。Gdx.app.postRunnable()
- 它与Android UI线程不同。您需要使用Android API,例如这里。 - Sergei Bubenshchikov一开始我也有同样的问题:我的Firebase控制台上当前屏幕名称的事件在哪里?但是,我调用了mFirebaseAnalytics.setCurrentScreen(this, "MainActivity", null);
方法,结果没有显示。
感谢Benoit的评论,我意识到这个方法指示了一个隐式参数的值,该参数会自动附加到您发送的任何事件上。这意味着它不是独立的事件,而是一个参数,自从您设置以来将粘附在您所有的事件上。
如果您在单个活动中有多个更改屏幕的情况下,这将非常有用。例如,当您有多个片段与一个托管活动时。并且您在每个片段的onResume()
中调用此方法。
如果您想要具有屏幕名称的不同指标,请明确地为其触发新事件。
Bundle params = new Bundle();
params.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "screen");
params.putString(FirebaseAnalytics.Param.ITEM_NAME, "MainActivity");
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.VIEW_ITEM, params);
val bundle = Bundle()
bundle.putString(FirebaseAnalytics.Param.SCREEN_NAME, "YOUR SCREEN NAME")
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW, bundle)
设置当前屏幕名称,指定应用程序中的当前视觉上下文。这有助于识别用户在应用程序中花费时间的区域以及他们如何与应用程序交互。
请注意,屏幕报告已自动启用,并为您记录当前活动的类名,无需调用此函数。可以通过在Activity的onResume回调中调用此函数并指定screenClassOverride参数来选择性地覆盖类名。
如果您的应用程序不为每个屏幕使用不同的Activity,则应在向用户呈现新屏幕时调用此函数并指定不同的screenName。
名称和classOverride将保持有效,直到当前Activity更改或进行新的setCurrentScreen调用。我将尝试将此方法添加到onResume方法中。我不知道结果,但我会分享我的经验。
firebaseAnalytics.setCurrentScreen(activity,screeenName,activity.getClass().getSimpleName());
firebaseAnalytics.setMinimumSessionDuration(100L);
params = new Bundle();
params.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, "screen");
params.putString(FirebaseAnalytics.Param.ITEM_NAME, screeenName);
firebaseAnalytics.logEvent(FirebaseAnalytics.Event.VIEW_ITEM, params);
尝试使用setCurrentScreen以及手动触发事件,因为Firebase不会立即将数据发送到控制台...但如果事件被触发了...所有剩余的数据都会被发送到Firebase中。