我应该如何在Google Analytics v4中跟踪Fragments?

16

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

文档中的示例 (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>

这个配置似乎启用了 Activity 的自动跟踪,但我认为这对 Fragment 没有任何奇效?在这个例子中,如果调用 t.setScreenName(path); 并且 path 是 "com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment",我会认为 "AnalyticsSampleApp ScreenView" 屏幕事件将被发送?

2个回答

5
是的,您需要使用您发布的链接中描述的解决方案。主要原因是片段的生命周期并不像活动那样直截了当。Android没有为片段生命周期提供回调。您应该在每次显示片段时将片段标识符设置为屏幕名称。在示例应用程序中,如果您查看MobilePlayground.java,则会看到onTabSelected。在示例应用程序中,每当屏幕更改时都会调用此函数。这将是设置屏幕并可能发送screenview/appview hits的好地方。如果您需要更详细的示例,请告诉我。

使用global_tracker.xml文件:String path = "com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment"; t.setScreenName(path);以上代码在EcommerceFragment的OnActivityCreated中执行。预期会在Google Analytics报告中报告“AnalyticsSampleApp ScreenView”屏幕事件,但实际上报告的事件为com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment。 - worawee.s
看起来,在配置xml中的<screenName></screeenName>映射不起作用。让它正常工作的正确方法是什么? - worawee.s
2
我不确定我理解了。如果你看到com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment,那可能是因为它是一个片段而不是活动。目前的XML文件仅支持活动,因为Android支持这些API。 - Avi
感谢@Avi,您能否更新此文档https://developers.google.com/analytics/devguides/collection/android/v4/screens#automatic。它使用<string name="com.example.app.BaseActivity">Home</string>而不是<screenName />,这相当令人困惑。从我们在这个主题中讨论的内容来看,<screenName />标签应该是正确的选择。 - worawee.s
4
但是您仍然在<screenName>标签中使用片段,似乎没有办法在处理片段屏幕视图时获取此信息。这是极具误导性的。请参见:https://developers.google.com/analytics/devguides/collection/android/v4/?hl=pl#tracking-methods(3) - Michał Klimczak

0

使用Google文档中的代码。

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());
      }
    });
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接