今回はGoogleAnalyticsの複数Activityの場合の導入方法です。
参照先は
Google Analytics in Android app - dealing with multiple activities
になりますが、英語です。
注意して下さい。
1回の起動を1訪問と数えてくれ、
Activityの移動をPageViewと数えてくれる優れものです。
今回は2つのクラスを作ります。
1.GoogleAnalyticsSessionManager.java
2.GoogleAnalyticsActivity.java
になります。
GoogleAnalyticsSessionManager.java
(ちょっと手を加えてありますが、解説しません)public class GoogleAnalyticsSessionManager { private static final String UA_ACCOUNT = "UA-0000000-1"; protected static GoogleAnalyticsSessionManager INSTANCE; protected int activityCount = 0; protected Integer dispatchIntervalSecs; protected String apiKey; protected Context context; /** * NOTE: you should use your Application context, not your Activity context, in order to avoid memory leaks. */ protected GoogleAnalyticsSessionManager( String apiKey, Application context ) { this.apiKey = apiKey; this.context = context; } /** * NOTE: you should use your Application context, not your Activity context, in order to avoid memory leaks. */ protected GoogleAnalyticsSessionManager( String apiKey, int dispatchIntervalSecs, Application context ) { this.apiKey = apiKey; this.dispatchIntervalSecs = dispatchIntervalSecs; this.context = context; } /** * This should be called once in onCreate() for each of your activities that use GoogleAnalytics. * These methods are not synchronized and don't generally need to be, so if you want to do anything * unusual you should synchronize them yourself. */ public void incrementActivityCount() { if( activityCount==0 ) if( dispatchIntervalSecs==null ) GoogleAnalyticsTracker.getInstance().startNewSession(apiKey,context); else GoogleAnalyticsTracker.getInstance().startNewSession(apiKey,dispatchIntervalSecs,context); ++activityCount; } /** * This should be called once in onDestroy() for each of your activities that use GoogleAnalytics. * These methods are not synchronized and don't generally need to be, so if you want to do anything * unusual you should synchronize them yourself. */ public void decrementActivityCount() { activityCount = Math.max(activityCount-1, 0); if( activityCount==0 ) GoogleAnalyticsTracker.getInstance().stopSession(); } /** * Get or create an instance of GoogleAnalyticsSessionManager */ public static GoogleAnalyticsSessionManager getInstance( Application application ) { if( INSTANCE == null ) INSTANCE = new GoogleAnalyticsSessionManager(UA_ACCOUNT, 60, application); return INSTANCE; } /** * Only call this if you're sure an instance has been previously created using #getInstance(Application) */ public static GoogleAnalyticsSessionManager getInstance() { return INSTANCE; } }
次に
GoogleAnalyticsActivity.java
public abstract class GoogleAnalyticsActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Need to do this for every activity that uses google analytics GoogleAnalyticsSessionManager.getInstance(getApplication()).incrementActivityCount(); } @Override protected void onResume() { super.onResume(); // Example of how to track a pageview event GoogleAnalyticsTracker.getInstance().trackPageView(getClass().getSimpleName()); } @Override protected void onDestroy() { super.onDestroy(); // Purge analytics so they don't hold references to this activity GoogleAnalyticsTracker.getInstance().dispatch(); // Need to do this for every activity that uses google analytics GoogleAnalyticsSessionManager.getInstance().decrementActivityCount(); } }
最後にどうやって導入するかというと
TestActivity.java
public class TestActivity extends GoogleAnalyticsActivity { @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); // as usual from here ... } }
みたいな感じで実装してください。
onResumeとonDestroyは呼び出さなくてもいいですし、
使う場合はsuper.onResume()かsuper.onDestroy()を必ず呼んでください。
0 件のコメント:
コメントを投稿