我正在尝试使用"广告系列归因"在我的Android应用上设置我的Google分析。基本上我有各种nfc标签启动我的应用程序,每个标签上都有一个额外的NDEF消息,其中包含"广告系列ID"。我希望每个代码都归功于我的分析帐户中的单独广告系列。但是,字符串已经从标签正确传递,这部分正在工作。现在我需要将它们作为跟踪器的一部分发送。
我有一个单独的MyApplication.java(直接从谷歌的开发站点复制)文件:
public class MyApplication extends Application {
private static final String PROPERTY_ID = "UA-XXXXXXX-X";
public enum TrackerName {
APP_TRACKER,
GLOBAL_TRACKER,
ECOMMERCE_TRACKER, //I don't really need this
}
HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>();
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.global_tracker);
mTrackers.put(trackerId, t);
}
return mTrackers.get(trackerId);
}
} 这非常直接来自谷歌开发者网站上的分析sdk4
然后在我想要跟踪自定义广告系列参数的cameraActivity中,我有
public class CameraActivity extends Activity implements PictureCallback {
String campaignID = "Tag_1"; //in reality this is passed in from the tag. but i hard-coded it here for simplicity
protected void onCreate(Bundle savedInstanceState) {
Tracker t = ((com.snappiesticker.app) getActivity().getApplication()).getTracker(TrackerName.APP_TRACKER);
t.send(new HitBuilders.ScreenViewBuilder().set("tag",campaignID).build());
}
}
现在它的应用程序名称有问题:com.snappiesticker.app以及getActivty()。该名称是我的应用程序包名称。应该是别的吗?此外,它无法找到定义getActivity()的位置。然而,这基本上是直接从谷歌开发网站复制的。
如何正确发送此跟踪器?
答案 0 :(得分:2)
我假设您已在应用清单中设置了应用类(MyApplication
),如下所示:
<application android:name=".MyApplication" ...>
此外,我假设MyApplication
类和CameraActivity
类都位于同一个包(您的应用程序包com.snappiesticker.app
)中。否则是包级别可见性方法getTracker()
。如果情况并非如此,则需要将可见性更改为public:
public synchronized Tracker getTracker(TrackerName trackerId) {
要从应用内的活动中获取Application类的实例,您可以调用该活动的getApplication()
方法。然后,您可以将Application对象强制转换为MyApplication
类的实例。然后,您将能够访问getTracker()
方法。
public class CameraActivity extends Activity implements PictureCallback {
protected void onCreate(Bundle savedInstanceState) {
Tracker t = ((MyApplication)getApplication()).getTracker(TrackerName.APP_TRACKER);
t.send(new HitBuilders.ScreenViewBuilder().set("tag",campaignID).build());
}
}
请注意,如果要使用
从XML文件实例化跟踪器,则只需要跟踪器XML文件(例如global_tracker.xml
)
Tracker t = analytics.newTracker(R.xml.global_tracker);
如果只从PROPERTY_ID字符串值中实例化跟踪器,则不需要这样的XML文件。