Как отслеживать фрагменты в Google Analytics v4?

С выпуском Google Analytics v4 (Android), каков рекомендуемый способ отслеживания фрагментов? Является ли это решение по-прежнему рекомендуемым - qaru.site/info/194048/...?

Образец в документах (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>

Эта конфигурация, похоже, включает автоматическое отслеживание действий, но я бы предположил, что это не работает для магии для фрагментов? В этом примере я бы предположил, что экранное событие "AnalyticsSampleApp ScreenView" будет отправлено, если вызывается t.setScreenName(path);, а путь - "com.google.android.gms.analytics.samples.mobileplayground.EcommerceFragment"?

Ответы

Ответ 1

Да, вам придется использовать решение, описанное в указанной вами ссылке. Основная причина этого заключается в том, что время жизни фрагментов не так прямолинейно, как время операций. Android не обеспечивает обратные вызовы для жизненного цикла фрагмента.

Что вам нужно сделать, это установить идентификатор фрагмента в качестве имени экрана всякий раз, когда отображается фрагмент. В примере приложения, если вы посмотрите MobilePlayground.java, вы увидите onTabSelected. В примере приложения эта функция вызывается всякий раз, когда изменяется экран. Это было бы хорошим местом для установки экрана и, возможно, отправки тегов screenview/appview.

Сообщите мне, если вы хотите более подробные примеры.

Ответ 2

Используйте этот код из Документов 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());
      }
    });
  }
}