[英]Integrate Google Analytics “v4” into an Android app
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: 在我的MainActivity中的OnCreate下:
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...) 我在应用程序下添加了清单(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:
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):at 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):at 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): 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
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):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):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)05-16 18:27:41.705:E / AndroidRuntime(25187) ):在dalvik .system.NativeStart.main(Native Method)
.system.NativeStart.main(本机方法)
As described in your link, the GA-related code should be placed inside the Application
class instead of the Activity
. 如您的链接中所述,与GA相关的代码应放在
Application
类中,而不是Activity
。
Create a class extends Application
like this: 创建一个类扩展
Application
如下所示:
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. 然后在您的
AndroidManifest.xml
的application
标记下,将android:name
替换为上面的MyApplication
类。
The tracker code should be placed in the Activity.oncreate
method such as 跟踪器代码应放置在
Activity.oncreate
方法中,例如
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());
}
.
.
.
}
Today i faced same issue and got your post, but no one has pointed to right direction. 今天,我面临着同样的问题并获得了您的职位,但是没有人指出正确的方向。
But i found solution and got the google analytics code working. 但是我找到了解决方案,并使Google Analytics(分析)代码正常工作。
Please do follow: 请注意:
1st - Move tracking code to your fragment class in public void onCreate(Bundle savedInstanceState) method (this has been changed in V4) 1st-在公共无效的onCreate(Bundle savedInstanceState)方法中将跟踪代码移动到片段类(在V4中已更改)
Reason: Because the lifetime of fragments is not as straightforward as that of Activities. 原因:因为片段的生存期没有活动的生存期简单。 Android does not provide callbacks for fragment lifecycle.
Android不提供片段生命周期的回调。
2nd - Step 2 from v4 implementation doc the Initialize Trackers code should be written into the Application class. v4实施文档的第2步-第2步,初始化跟踪器代码应写入Application类。 Important for Application Class refer application tag and property as android:name="com.brodev.socialapp.entity.User" from AndroidManifest.xml
对于应用程序类而言,重要的是将应用程序标记和属性从AndroidManifest.xml引用为android:name =“ com.brodev.socialapp.entity.User”
Please mark answer UP if this helps. 如果有帮助,请将答案标记为“ UP”。 So it will help others.
因此,它将帮助他人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.