如何使用自定义广告系列归因(不是网址)设置Google Analytics

时间:2014-10-27 19:21:10

标签: android google-analytics nfc

我正在尝试使用"广告系列归因"在我的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()的位置。然而,这基本上是直接从谷歌开发网站复制的。

如何正确发送此跟踪器?

1 个答案:

答案 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文件。