Как настроить Google Analytics с помощью пользовательской атрибуции кампании (не URL)

Я пытаюсь настроить свою аналитику Google в своем приложении для Android с помощью "атрибуции кампании". В основном у меня есть различные теги NFC, которые запускают мое приложение, и у каждого есть дополнительное сообщение NDEF с "идентификатором кампании". И я хочу, чтобы каждый тег был привязан к отдельной кампании в моем аккаунте аналитики. Однако строки уже правильно переданы из тегов, и эта часть работает. Теперь мне нужно отправить их как часть трекера.

У меня есть отдельный файл MyApplication.java (скопированный непосредственно с сайта разработчика Google) с:

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);
    }

} это в значительной степени прямо с сайта разработчиков Google на аналитике 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(). Однако, опять же, это в основном скопировано непосредственно с веб-сайта Google Dev.

Как правильно отправить этот трекер?

1 ответ

Решение

Я предполагаю, что вы установили свой класс приложения (MyApplication) в вашем приложении проявляется что-то вроде этого:

<application android:name=".MyApplication" ...>

Более того, я предполагаю, что оба MyApplication класс и CameraActivity класс, проживать в том же пакете (ваш пакет приложений com.snappiesticker.app). В противном случае метод видимости на уровне пакета getTracker(), Если это не так, вам нужно изменить видимость на общедоступную:

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-файл трекера (например, global_tracker.xml) если вы хотите создать экземпляр трекера из файла XML с помощью

Tracker t = analytics.newTracker(R.xml.global_tracker);

Если вы создаете экземпляры трекеров только из строкового значения PROPERTY_ID, такой XML-файл не нужен.

Другие вопросы по тегам