2016-12-14 208 views
1

我正在開發Android應用程序。我正在嘗試將Google Analytics與我的Android應用整合。我正在跟蹤訪問我的應用程序的頁面。但數據不會從應用發送到Google Analytics控制檯/信息中心。請看下面我做了什麼。Google Analytics for Android無法正常工作

  1. 我已經將Firebase推送通知集成到我的應用程序中。所以我不需要添加json文件。

  2. 我將我的應用程序從Firebase註冊到Google Analytics,並獲得了唯一的Track ID。

  3. 然後在我的應用程序類中,我創建了這樣的跟蹤器實例。

public class MApplication extends Application { 

     public static final String GOOGLE_TRACK_ID ="MY-TRACK-ID"; 
     public static GoogleAnalytics analytics; 
     public static Tracker tracker; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      analytics = GoogleAnalytics.getInstance(this); 
      analytics.setLocalDispatchPeriod(1800); 
      tracker = analytics.newTracker(GOOGLE_TRACK_ID); 
      tracker.enableExceptionReporting(true); 
      tracker.enableAdvertisingIdCollection(true); 
      tracker.enableAutoActivityTracking(true); 
     } 

    } 

我開始跟蹤喜歡這樣,因爲我無法找到XML文件。所以我找到了這個解決方案 - Android Google Analytics xml file。這就是我爲什麼要這樣實例化的原因。

  1. 然後在我想跟蹤的頁面中,我發送這樣的數據。
mApplication.tracker.setScreenName("Articles Page"); 
       mApplication.tracker.send(new HitBuilders.ScreenViewBuilder().build()); 

這是我的清單文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.football.waiyanhein.tonightfootballreport"> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-feature android:name="android.hardware.camera" /> 
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <application 
     android:name="com.football.waiyanhein.model.MApplication" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 
     <activity android:name="com.football.waiyanhein.tonightfootballreport.StartActivity" 
      android:configChanges="orientation|screenSize" 
      android:noHistory="true"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     //Other activities go here 

     <provider android:authorities="com.facebook.app.FacebookContentProvider1864111377153297" 
      android:name="com.facebook.FacebookContentProvider" 
      android:exported="true"/> 

     <receiver android:name="com.football.waiyanhein.receiver.NotificationReceiver"> 
      <intent-filter> 
       <action android:name="com.tonightfootball.waiyanhein.receiver.NotificationReceiver"></action> 
      </intent-filter> 
     </receiver> 
     <receiver android:name="com.football.waiyanhein.receiver.MemeCreateReceiver"> 
      <intent-filter> 
       <action android:name="com.tonightfootball.waiyanhein.receiver.MemeCreateReceiver"></action> 
      </intent-filter> 
     </receiver> 


     <service android:name="com.football.waiyanhein.service.MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
      </intent-filter> 
     </service> 
     <service android:name="com.football.waiyanhein.service.FirebaseIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 
    </application> 

</manifest> 

沒有數據發送,你可以在這裏看到。

enter image description here

當我檢查分析儀表盤,也沒有用戶數據,沒有什麼分析儀表盤發出。爲什麼它不起作用?

+0

請注意,您的儀表板將在24小時內更新。如果您想查看實時分析,請轉到谷歌分析控制檯中的「實時」標籤。 – Nas

+0

我檢查實時。活躍用戶仍然爲零。 :(。我的行事方式是對嗎? –

+0

請發佈您的清單 – Nas

回答

1

請確保您的跟蹤ID是有效的。

public class MApplication extends Application { 

     public static final String GOOGLE_TRACK_ID ="MY-TRACK-ID"; 
     public static GoogleAnalytics analytics; 
     public static Tracker tracker; 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      getDefaultTracker(); 

     } 

synchronized public void getDefaultTracker() { 
      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
      analytics.setLocalDispatchPeriod(1800); 
      tracker = analytics.newTracker(GOOGLE_TRACK_ID); 
      tracker.enableExceptionReporting(true); 
      tracker.enableAdvertisingIdCollection(true); 
      tracker.enableAutoActivityTracking(true); 

    } 
+0

我試過這個,但是沒有工作 –

+0

這真的有效,問題在於我的tr ack ID。最後還有一個額外的零。感謝您的支持。 –

0

您可以嘗試在需要跟蹤的活動中添加下面的代碼行,而不是使用tracker.send()。

@Override 
protected void onStart() { 
    super.onStart(); 
    GoogleAnalytics.getInstance(this).reportActivityStart(this); 
} 

@Override 
protected void onStop() { 
    GoogleAnalytics.getInstance(this).reportActivityStop(this); 
    super.onStop(); 
} 
+0

我正在做這個片段,此外,我需要命名頁面名稱檢查條件。 –

1

嘗試使用下面的代碼爲snippest谷歌分析

添加您的build.gradle

dependencies { 
    compile 'com.google.android.gms:play-services-analytics:9.2.0' 
} 

添加Java類AnalyticsTrackers.java

package com.nitin.tracker; 

import android.content.Context; 

import com.google.android.gms.analytics.GoogleAnalytics; 
import com.google.android.gms.analytics.Tracker; 
import java.util.HashMap; 
import java.util.Map; 


public final class AnalyticsTrackers { 

public enum Target { 
    APP, 
    // Add more trackers here if you need, and update the code in #get(Target) below 
} 

private static AnalyticsTrackers sInstance; 

public static synchronized void initialize(Context context) { 
    if (sInstance != null) { 
     throw new IllegalStateException("Extra call to initialize analytics trackers"); 
    } 

    sInstance = new AnalyticsTrackers(context); 
} 

public static synchronized AnalyticsTrackers getInstance() { 
    if (sInstance == null) { 
     throw new IllegalStateException("Call initialize() before getInstance()"); 
    } 

    return sInstance; 
} 

private final Map<Target, Tracker> mTrackers = new HashMap<Target, Tracker>(); 
private final Context mContext; 

/** 
* Don't instantiate directly - use {@link #getInstance()} instead. 
*/ 
private AnalyticsTrackers(Context context) { 
    mContext = context.getApplicationContext(); 
} 

public synchronized Tracker get(Target target) { 
    if (!mTrackers.containsKey(target)) { 
     Tracker tracker; 
     switch (target) { 
      case APP: 
       tracker = GoogleAnalytics.getInstance(mContext).newTracker(R.xml.app_tracker); 
       break; 
      default: 
       throw new IllegalArgumentException("Unhandled analytics target " + target); 
     } 
     mTrackers.put(target, tracker); 
    } 

    return mTrackers.get(target); 
} 
} 

添加RES/XML/app_tracker.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<!-- End current session if app sleeps for a period of time --> 
<integer name="ga_sessionTimeout">300</integer> 

<!-- Enable automatic Activity measurement --> 
<bool name="ga_autoActivityTracking">true</bool> 

<!-- The property id associated with this analytics tracker --> 
<string name="ga_trackingId">UA-12345678-2</string> 

<string name="ga_sampleFrequency">100.0</string> 

<bool name="ga_reportUncaughtExceptions">true</bool> 
</resources> 

創建擴展應用程序類像所有MyApplication的.java

package com.nitin.tracker; 

import android.app.Application; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.support.multidex.MultiDex; 
import com.google.android.gms.analytics.GoogleAnalytics; 
import com.google.android.gms.analytics.HitBuilders; 
import com.google.android.gms.analytics.StandardExceptionParser; 
import com.google.android.gms.analytics.Tracker; 
import org.acra.ReportingInteractionMode; 
import org.acra.annotation.ReportsCrashes; 

public class MyApplication extends Application { 

public static final String TAG = MyApplication.class 
     .getSimpleName(); 

private static MyApplication mInstance; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    mInstance = this; 

    AnalyticsTrackers.initialize(this); 
    AnalyticsTrackers.getInstance().get(AnalyticsTrackers.Target.APP); 
} 

public static synchronized MyApplication getInstance() { 
    return mInstance; 
} 

public synchronized Tracker getGoogleAnalyticsTracker() { 
    AnalyticsTrackers analyticsTrackers = AnalyticsTrackers.getInstance(); 
    return analyticsTrackers.get(AnalyticsTrackers.Target.APP); 
} 


public void trackScreenView(String screenName) { 

     Tracker t = getGoogleAnalyticsTracker(); 
     // Set screen name. 
     t.setScreenName(screenName); 
     // Send a screen view. 
     t.send(new HitBuilders.ScreenViewBuilder().build()); 
     GoogleAnalytics.getInstance(this).dispatchLocalHits(); 

} 

public void trackException(Exception e) { 
    if (e != null) { 
     Tracker t = getGoogleAnalyticsTracker(); 

     t.send(new HitBuilders.ExceptionBuilder() 
       .setDescription(
         new StandardExceptionParser(this, null) 
           .getDescription(Thread.currentThread().getName(), e)) 
       .setFatal(false) 
       .build() 
     ); 
    } 
} 


public void trackEvent(String category, String action, String label) { 
    Tracker t = getGoogleAnalyticsTracker(); 

    // Build and send an Event. 
    t.send(new HitBuilders.EventBuilder().setCategory(category).setAction(action).setLabel(label).build()); 
} 
} 

添加manifeast。XML

<application 
    android:name="com.nitin.tracker.MyApplication"> 
    <!-- Analytics Permission --> 
    <receiver 
     android:name="com.google.android.gms.analytics.AnalyticsReceiver" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" /> 
     </intent-filter> 
    </receiver> 

    <service 
     android:name="com.google.android.gms.analytics.AnalyticsService" 
     android:enabled="true" 
     android:exported="false" /> 

    <!-- 
     Optionally, register CampaignTrackingReceiver and CampaignTrackingService to enable 
     installation campaign reporting 
    --> 
    <receiver 
     android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 

    <service android:name="com.google.android.gms.analytics.CampaignTrackingService" /> 

如果你想跟蹤屏幕呼叫

@Override 
protected void onResume() { 
    super.onResume(); 
    MyApplication.getInstance().trackScreenView("Screen Name"); 
} 

如果你想跟蹤事件

MyApplication.getInstance().trackEvent("Module", "Event Name", "Operation of event"); 

它爲我工作。我也希望它對你有幫助。

+0

我已經試過這種方式,並沒有工作:( –

+0

@WaiYanHein它爲我工作。檢查您的trckerId ..更多https: //developers.google.com/analytics/devguides/collection/android/v4/ –

+0

嗯,我真的很抱歉,問題在於我的track ID,我的track ID末尾有一個額外的0。爲了您的支持 –

相關問題