Как настроить 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-файл не нужен.