Как отслеживать фрагменты в 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());
}
});
}
}