webentwicklung-frage-antwort-db.com.de

Wie soll ich Fragmente in Google Analytics v4 verfolgen?

Welche Methode zum Nachverfolgen von Fragmentansichten wird mit der Veröffentlichung von Google Analytics v4 (Android) empfohlen? Ist diese Lösung immer noch die empfohlene Methode - https://stackoverflow.com/a/19284014/413254 ?

Das Beispiel in den Dokumenten ( https://developers.google.com/analytics/devguides/collection/Android/v4/#analytics-xml ) hat die folgende Konfiguration:

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>

Diese Konfiguration scheint die automatische Nachverfolgung für Aktivitäten zu ermöglichen, aber ich würde annehmen, dass dies für Fragmente keine magische Wirkung hat. In diesem Beispiel würde ich annehmen, dass das Bildschirmereignis "AnalyticsSampleApp ScreenView" gesendet wird, wenn t.setScreenName(path); aufgerufen wird und path "com.google.Android.gms.analytics.samples.mobileplayground.EcommerceFragment" ist.

16
loeschg

Ja, Sie müssen die Lösung verwenden, die in dem von Ihnen geposteten Link beschrieben ist. Der Hauptgrund dafür ist, dass die Lebensdauer von Fragmenten nicht so einfach ist wie die von Aktivitäten. Android bietet keine Rückrufe für den Fragment-Lebenszyklus.

Sie sollten den Fragmentbezeichner immer dann als Bildschirmnamen festlegen, wenn das Fragment angezeigt wird. Wenn Sie sich in der Beispiel-App MobilePlayground.Java ansehen, sehen Sie onTabSelected. In der Beispiel-App wird diese Funktion immer dann aufgerufen, wenn sich der Bildschirm ändert. Dies wäre ein guter Ort, um den Bildschirm einzustellen und möglicherweise screenview/appview Treffer zu senden.

Lassen Sie mich wissen, wenn Sie detailliertere Beispiele wünschen.

5
Avi

Verwenden Sie diesen Code aus Googles Dokumenten .

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