web-dev-qa-db-fra.com

Comment dois-je suivre les fragments dans Google Analytics v4?

Avec la sortie de Google Analytics v4 (Android), quelle est la méthode recommandée pour suivre les vues Fragment? Cette solution est-elle toujours la solution recommandée - https://stackoverflow.com/a/19284014/413254 ?

L'exemple dans la documentation ( https://developers.google.com/analytics/devguides/collection/Android/v4/#analytics-xml ) présente la configuration suivante:

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>

Cette configuration semble permettre le suivi automatique pour Activités, mais je suppose que cela ne fonctionne pas comme par magie pour Fragments? Dans cet exemple, je suppose que l'événement d'écran "AnalyticsSampleApp ScreenView" sera envoyé si t.setScreenName(path); est appelé et que le chemin est "com.google.Android.gms.analytics.samples.mobileplayground.EcommerceFragment"?

16
loeschg

Oui, vous devrez utiliser la solution décrite dans le lien que vous avez posté. La raison principale en est que la durée de vie des fragments n'est pas aussi simple que celle des activités. Android ne fournit pas de rappel pour le cycle de vie des fragments.

Ce que vous devez faire est de définir l'identifiant de fragment comme nom d'écran chaque fois que le fragment est affiché. Dans l'exemple d'application, si vous regardez MobilePlayground.Java, vous verrez onTabSelected. Dans l'exemple d'application, cette fonction est appelée chaque fois que l'écran change. Ce serait un bon endroit pour configurer screen et éventuellement envoyer des hits screenview/appview.

Faites-moi savoir si vous souhaitez des exemples plus détaillés.

5
Avi

Utilisez ce code à partir de Google Documents .

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