【问题标题】:How should I track Fragments in Google Analytics v4?我应该如何在 Google Analytics v4 中跟踪片段?
【发布时间】:2015-03-10 19:31:58
【问题描述】:

随着 Google Analytics v4 (Android) 的发布,跟踪片段视图的推荐方法是什么?这个解决方案仍然是推荐的方式吗 - https://stackoverflow.com/a/19284014/413254

文档中的示例 (https://developers.google.com/analytics/devguides/collection/android/v4/#analytics-xml) 具有以下配置:

global_tracker.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="ga_sessionTimeout">300</integer>
    <bool name="ga_autoActivityTracking">true</bool>
    <screenName name="com.google.android.gms.analytics.samples.mobileplayground.ScreenviewFragment">
        AnalyticsSampleApp ScreenView
    </screenName>
    <screenName name="com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment">
        AnalyticsSampleApp EcommerceView
    </screenName>
    <!--  The following value should be replaced with correct property id. -->
    <string name="ga_trackingId">UA-XXXXXXX-Y</string>
</resources>

此配置似乎启用了活动的自动跟踪,但我认为这对 Fragments 没有任何魔力?在此示例中,我假设如果调用 t.setScreenName(path); 并且路径为 "com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment",则会发送“AnalyticsSampleApp ScreenView”屏幕事件?

【问题讨论】:

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


    【解决方案1】:

    是的,您必须使用您发布的链接中描述的解决方案。主要原因是片段的生命周期不像活动的生命周期那么简单。 Android 不提供片段生命周期的回调。

    您应该做的是在显示片段时将片段标识符设置为屏幕名称。在示例应用程序中,如果您查看MobilePlayground.java,您将看到onTabSelected。在示例应用程序中,只要屏幕发生变化,就会调用此函数。那将是设置屏幕并可能发送screenview/appview 点击的好地方。

    如果您需要更详细的示例,请告诉我。

    【讨论】:

    • 使用 global_tracker.xml 字符串 path = "com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment"; t.setScreenName(路径);上面的代码在 EcommerceFragment 的 OnActivityCreated 中执行。 “AnalyticsSampleApp ScreenView”屏幕事件应该在 Google 分析报告中报告,但实际事件报告显示为 com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment
    • 似乎是,配置xml中的 映射不起作用。使这项工作正常工作的正确方法是什么?
    • 我不确定我是否理解。如果您看到的是 com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment,那可能是因为它是一个片段而不是 Activity。由于 Android 支持的 API,xml 文件目前仅支持活动。
    • 感谢@Avi,您能否更新此文档developers.google.com/analytics/devguides/collection/android/v4/…。它使用 Home 而不是 这很令人困惑。 标签应该是我们在本主题中讨论的正确标签。
    • @Avi 但是您仍然在 标签中使用片段,并且在处理片段屏幕视图时似乎无法取回此信息。这是极大的误导。见:developers.google.com/analytics/devguides/collection/android/v4/… (3)
    【解决方案2】:

    使用来自Google's docs的代码。

    package com.google.android.apps.mobileplayground;
    
    import com.google.android.apps.mobileplayground.AnalyticsSampleApp.TrackerName;
    import com.google.android.gms.analytics.GoogleAnalytics;
    import com.google.android.gms.analytics.HitBuilders;
    import com.google.android.gms.analytics.Tracker;
    
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.ViewGroup;
    import android.widget.Button;
    
    /**
     * Class to exercise Event hits.
     */
    public class EventFragment extends Fragment {
    
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
          Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        View view = inflater.inflate(R.layout.event, container, false);
    
        setupEvent(view, R.id.video1Play, R.string.videoCategory, R.string.videoPlay, R.string.video1);
        setupEvent(view, R.id.video1Pause, R.string.videoCategory, R.string.videoPause,
            R.string.video1);
        setupEvent(view, R.id.video2Play, R.string.videoCategory, R.string.videoPlay, R.string.video2);
        setupEvent(view, R.id.video2Pause, R.string.videoCategory, R.string.videoPause,
            R.string.video2);
    
        setupEvent(view, R.id.book1View, R.string.bookCategory, R.string.bookView, R.string.book1);
        setupEvent(view, R.id.book1Share, R.string.bookCategory, R.string.bookShare, R.string.book1);
    
        final Button dispatchButton = (Button) view.findViewById(R.id.eventDispatch);
        dispatchButton.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            // Manually start a dispatch (Unnecessary if the tracker has a dispatch interval)
            GoogleAnalytics.getInstance(getActivity().getApplicationContext()).dispatchLocalHits();
          }
        });
        return view;
      }
    
      private void setupEvent(View v, int buttonId, final int categoryId, final int actionId,
          final int labelId) {
        final Button pageviewButton = (Button) v.findViewById(buttonId);
        pageviewButton.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            // Get tracker.
            Tracker t = ((AnalyticsSampleApp) getActivity().getApplication()).getTracker(
                TrackerName.APP_TRACKER);
            // Build and send an Event.
            t.send(new HitBuilders.EventBuilder()
                .setCategory(getString(categoryId))
                .setAction(getString(actionId))
                .setLabel(getString(labelId))
                .build());
          }
        });
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      相关资源
      最近更新 更多