整合谷歌Analytics(分析)" V4"成一个Android应用程序应用程序、QUOT、Analytics、Android

2023-09-03 22:57:52 作者:渡河已尽生

感谢您的回答,但它仍然无法正常工作。

我已创建:

 公共类GAnalytics扩展应用{

//下面一行应改为包括正确的属性ID。
私有静态最后弦乐PROPERTY_ID =UA-XXXX-X;

公共静态INT GENERAL_TRACKER = 0;

公共枚举TrackerName {
    APP_TRACKER,//跟踪器只用在这个应用程序。
    GLOBAL_TRACKER,//使用由一家公司所有的应用程序跟踪。例如:卷起跟踪。
    ECOMMERCE_TRACKER,//跟踪从一个公司所使用的所有电子商务交易。
}

HashMap的< TrackerName,跟踪> mTrackers =新的HashMap< TrackerName,跟踪>();

公共GAnalytics(){
    超();
}

同步跟踪getTracker(TrackerName trackerId){
    如果(!mTrackers.containsKey(trackerId)){

        GoogleAnalytics分析= GoogleAnalytics.getInstance(本);
        跟踪T =(trackerId == TrackerName.APP_TRACKER)? analytics.newTracker(PROPERTY_ID)
                (trackerId == TrackerName.GLOBAL_TRACKER)? analytics.newTracker(
                        R.xml.global_tracker)
                        :analytics.newTracker(R.xml.ecommerce_tracker);
        mTrackers.put(trackerId,T);

    }
    返回mTrackers.get(trackerId);
}
 

}

在OnCreate中我MainActivity:

 字符串ACTIVITY_NAME =MyApp的;
//获取跟踪。
    跟踪T =((GAnalytics)getApplication())getTracker(TrackerName.APP_TRACKER)。

    //设置的网名。
    //如果路径是一个字符串再presenting的网名。
    t.se​​tScreenName(ACTIVITY_NAME);

    //发送一个屏幕视图。
    t.se​​nd(新HitBuilders.AppViewBuilder()建());
 

我已经添加在应用程序清单(机器人:名字......)

会玩数据才是好客服 Live800助客服玩转数据提升服务

和我的日志:

  

05-16 18:27:41.705:E / AndroidRuntime(25187):致命异常:主要   05-16 18:27:41.705:E / AndroidRuntime(25187):工艺:com.MyApplication.Banana,PID:25187   05-16 18:27:41.705:E / AndroidRuntime(25187):java.lang.NoClassDefFoundError的:com.google.android.gms.analytics.GoogleAnalytics   05-16 18:27:41.705:E / AndroidRuntime(25187):在com.MyApplication.Banana.GAnalytics.getTracker(GAnalytics.java:30)   05-16 18:27:41.705:E / AndroidRuntime(25187):在com.MyApplication.Banana.MainActivity.onCreate(MainActivity.java:56)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.Activity.performCreate(Activity.java:5231)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.access $ 800(ActivityThread.java:135)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.os.Handler.dispatchMessage(Handler.java:102)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.os.Looper.loop(Looper.java:136)   05-16 18:27:41.705:E / AndroidRuntime(25187):在android.app.ActivityThread.main(ActivityThread.java:5017)   05-16 18:27:41.705:E / AndroidRuntime(25187):在java.lang.reflect.Method.invokeNative(本机方法)   05-16 18:27:41.705:E / AndroidRuntime(25187):在java.lang.reflect.Method.invoke(Method.java:515)   05-16 18:27:41.705:E / AndroidRuntime(25187):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779)   05-16 18:27:41.705:E / AndroidRuntime(25187):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)   05-16 18:27:41.705:E / AndroidRuntime(25187):在dalvik.system.NativeStart.main(本机方法)

解决方案

在你的链接描述的那样,GA-相关code应放在应用程序里面类而不是活动

创建一个类继承应用程序是这样的:

 公共类MyApplication的扩展应用{
    //跟踪相关code应该放在这里(枚举,getTracker,mTrackers)
}
 

然后在的Andr​​oidManifest.xml ,根据应用程序标记,更换安卓:名称上述所有MyApplication 类。

跟踪器code应该放在 Activity.oncreate 的方法,如

 公共类MainActivity延伸活动{
。
。
。
    @覆盖
    保护无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
//获取跟踪。
    跟踪T =((AnalyticsSampleApp)getApplication())。getTracker(
        TrackerName.APP_TRACKER);

    //设置的网名。
    //如果路径是一个字符串再presenting的网名。
    t.se​​tScreenName(路径);

    //发送一个屏幕视图。
    t.se​​nd(新HitBuilders.AppViewBuilder()建());
}
。
。
。
}
 

Thanks for the answer, but it still does not work.

I have create :

public class GAnalytics extends Application{

// The following line should be changed to include the correct property id.
private static final String PROPERTY_ID = "UA-XXXX-X";

public static int GENERAL_TRACKER = 0;

public enum TrackerName {
    APP_TRACKER, // Tracker used only in this app.
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking.
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company.
}

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();

public GAnalytics() {
    super();
}

synchronized Tracker getTracker(TrackerName trackerId) {
    if (!mTrackers.containsKey(trackerId)) {

        GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
        Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID)
                : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(
                        R.xml.global_tracker)
                        : analytics.newTracker(R.xml.ecommerce_tracker);
        mTrackers.put(trackerId, t);

    }
    return mTrackers.get(trackerId);
}

}

Under OnCreate in my MainActivity:

String ACTIVITY_NAME = "MyApp";
// Get tracker.
    Tracker t = ((GAnalytics) getApplication()).getTracker(TrackerName.APP_TRACKER);

    // Set screen name.
    // Where path is a String representing the screen name.
    t.setScreenName(ACTIVITY_NAME);

    // Send a screen view.
    t.send(new HitBuilders.AppViewBuilder().build());

I have added the manifest under Application (android: name...)

And my Log:

05-16 18:27:41.705: E/AndroidRuntime(25187): FATAL EXCEPTION: main 05-16 18:27:41.705: E/AndroidRuntime(25187): Process: com.MyApplication.Banana, PID: 25187 05-16 18:27:41.705: E/AndroidRuntime(25187): java.lang.NoClassDefFoundError: com.google.android.gms.analytics.GoogleAnalytics 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.MyApplication.Banana.GAnalytics.getTracker(GAnalytics.java:30) 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.MyApplication.Banana.MainActivity.onCreate(MainActivity.java:56) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.Activity.performCreate(Activity.java:5231) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.access$800(ActivityThread.java:135) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.os.Handler.dispatchMessage(Handler.java:102) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.os.Looper.loop(Looper.java:136) 05-16 18:27:41.705: E/AndroidRuntime(25187): at android.app.ActivityThread.main(ActivityThread.java:5017) 05-16 18:27:41.705: E/AndroidRuntime(25187): at java.lang.reflect.Method.invokeNative(Native Method) 05-16 18:27:41.705: E/AndroidRuntime(25187): at java.lang.reflect.Method.invoke(Method.java:515) 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 05-16 18:27:41.705: E/AndroidRuntime(25187): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 05-16 18:27:41.705: E/AndroidRuntime(25187): at dalvik.system.NativeStart.main(Native Method)

解决方案

As described in your link, the GA-related code should be placed inside the Application class instead of the Activity.

Create a class extends Application like this:

public class MyApplication extends Application{
    //the tracker related code should be place here (the enum, getTracker, mTrackers)
}

then in your AndroidManifest.xml, under the application tag, replace the android:name with the above MyApplication class.

The tracker code should be placed in the Activity.oncreate method such as

public class MainActivity extends Activity {
.
.
.
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
// Get tracker.
    Tracker t = ((AnalyticsSampleApp) getApplication()).getTracker(
        TrackerName.APP_TRACKER);

    // Set screen name.
    // Where path is a String representing the screen name.
    t.setScreenName(path);

    // Send a screen view.
    t.send(new HitBuilders.AppViewBuilder().build());
}
.
.
.
}