Firebase setCurrentScreen()作为第一个事件并未记录正确的值

时间:2018-04-27 09:59:37

标签: android firebase events logging firebase-analytics

ViewPager Tabs,因此当用户在标签之间切换时,我会将自定义屏幕名称记录到Firebase Analytics。 问题是我的第一个事件没有记录。为什么呢?

是否会发生因为记录了自动screen_view事件(没有firebase_screen参数我需要正确分析数据)并且此自动事件具有更高优先级"并覆盖我的活动?

或者我可能将我的第一个事件记录在错误的地方(onCreate方法)?

简化代码:

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        (...)

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {
                FirebaseAnalytics.getInstance(SecondActivity.this).setCurrentScreen(SecondActivity.this, getTabNameForLogging(position), null);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });

        //send event because onPageSelected isn't triggered at activity/viewpager start-up
        FirebaseAnalytics.getInstance(this).setCurrentScreen(this, "TAB 0", null);

    }

    private String getTabNameForLogging(int position) {
        switch (position) {
            case 0:
                return "TAB 0";
            case 1:
                return "TAB 1";
            case 2:
                return "TAB 2";
            default:
                return "invalid position";
        }
    }
}

3 个答案:

答案 0 :(得分:1)

原因可能是在创建新活动后过早发送该事件。将调用放在onResume或onGlobalLayout上不是解决方案,而是一种解决方法。

当我调试项目中的类似问题时,我发现有一些日志打印如下:

V / FA:屏幕暴露时间少于1000毫秒。活动未发送。

我的理解是,事件必须至少间隔1000毫秒发送一次(请记住,在创建新活动时库正在发送自动事件)。

我希望它有更多记录,我花了很多时间在与缺少分析事件有关的问题上……

答案 1 :(得分:0)

可能是firebase无法setCurrentScreen,因为它没有从onCreate()中的SecondActivity.this获取活动。类似的事情发生在我身上。

有一些解决方法,比如把它放在onGlobalLayout()或onResume()上。

答案 2 :(得分:-1)

原因是,引用official documentation

  

如果您的应用不使用,则手动跟踪屏幕非常有用   为您可能希望的每个屏幕分隔UIViewController或Activity   跟踪,例如在游戏中。

因此,您无法在Activity内使用标签对其进行实际更改,但每个Activity都是唯一的。另外,如果您将screenClassOverride设置为null,则会将其恢复为默认值,请参阅以下内容:

  

屏幕类的名称。默认情况下,这是该类的名称   当前的活动。设置为null以恢复为默认类名。

我建议您在标签中使用view_item来满足您的这种需求,并将其发送给您,以便更好地满足您的需求。但是,如果你想知道为什么它没有解雇第一个只是在onCreate上尝试这样:

FirebaseAnalytics.getInstance(this).setCurrentScreen(SecondActivity.this, "SecondActivity");