Google Analytics для Android с использованием нескольких действий

Я пытаюсь интегрировать Google Analytics в свой проект Android, используя информацию на веб-сайте соответствующего SDK. Однако документации очень мало. В моем проекте 6 различных действий, и я заметил, что использование этого метода на веб-сайте приводит к уникальному посещению в Google Analytics каждого открываемого действия, даже если оно все еще находится в том же сеансе. Судя по всему, Google Analytics для Android никогда не использует повторно ранее использованный сеанс.

Их метод - начать отслеживать активность в onCreate, а затем прекратить отслеживание в onDestroy. Проблема, с которой я столкнулся, заключается в том, что сеанс останется активным, если пользователь нажмет кнопку «Домой» вместо кнопки «Назад», поскольку действие не будет уничтожено. Поэтому я решил сделать это в onResume и onPause, но это означает, что новые сеансы открываются при открытии нового Activity.

Кто-нибудь знает способ действительно отслеживать один сеанс по нескольким действиям?


person Franklin    schedule 06.10.2010    source источник
comment
Связано: http://stackoverflow.com/questions/6232177/gotchas-when-using-google-analytics-for-android-sdk   -  person emmby    schedule 04.06.2011


Ответы (2)


Изучив жизненный цикл Activity, я пришел к следующему выводу.

При переключении с Activity A на другое Activity B метод onStop для A вызывается ПОСЛЕ метода onStart для B. Затем я увеличивал счетчик ссылок каждый раз, когда к (статическому) трекеру обращаются в методе onStart. В методе onStop я сначала проверял, равен ли счетчик ссылок 0, и останавливал трекер, если был. В конце метода onStop я бы уменьшил счетчик ссылок.

Кажется, что в данный момент это работает достаточно хорошо, а также должно работать, когда в приложении есть несколько Activity, которые могут выступать в качестве точки входа.

person Franklin    schedule 06.10.2010
comment
Я заметил один недостаток: onStop не вызывается, когда экран устройства выключен, поэтому сеанс остается активным ... - person Franklin; 06.10.2010
comment
Это не всегда работает, поскольку onStop не всегда вызывается сразу после onStart, так как это может быть отложено до запуска третьего действия, в результате чего счетчик достигает 2 и уменьшается до 1, когда текущее действие больше не отображается. . - person James Goodwin; 26.01.2012
comment
В некоторых случаях это может быть проблемой, но мне нужно только знать, есть ли ссылки или нет, поэтому я проверяю только нулевые или ненулевые значения счетчика ссылок. - person Franklin; 14.02.2012

Повторяю ответ, который я разместил здесь: Google Analytics в приложении для Android - иметь дело с несколькими видами деятельности

Подход, который я использую, заключается в использовании привязанной службы (я уже использую ее, поэтому был избавлен от создания дополнительного кода шаблона).

Привязанная служба будет существовать только до тех пор, пока с ней связаны действия. Все действия в моем приложении привязаны к этой службе, поэтому она длится только до тех пор, пока пользователь активно использует мое приложение - поэтому это очень похоже на настоящий «сеанс».

Я запускаю трекер с одноэлементным экземпляром Application, который я расширил и добавил статический метод getInstance () для извлечения экземпляра:

// Non-relevant code removed

public IBinder onBind(Intent intent) {
    tracker = GoogleAnalyticsTracker.getInstance();
    tracker.startNewSession(PROPERTY_ID, MyApp.getInstance());
}


public boolean onUnbind(Intent intent) {
    tracker.stopSession();
}

См .: http://developer.android.com/guide/topics/fundamentals/bound-services.html

person evaneus    schedule 14.09.2011
comment
Но если вы используете этот подход, сеанс останется активным, если пользователь нажмет кнопку «Домой», верно? Я ожидал, что нажатие кнопки «Домой» также завершит сеанс. - person Franklin; 15.09.2011
comment
Нет, не в этом случае. Но это зависит от того, где вы привязываете и развязываете свое служение в своей деятельности. В моем случае я привязываю onStart () и отключаю onStop (). Согласно: developer.android.com/guide/topics/fundamentals/ Видимое время жизни действия происходит между вызовом onStart () и вызовом onStop (). Итак, если одно из моих действий не отображается на переднем плане, то служба не привязана, и сеанс неактивен. - person evaneus; 15.09.2011
comment
Я должен добавить, что если вы запускаете внешние намерения из своих действий, вам, вероятно, потребуется использовать startActivityForResult () или какой-либо другой механизм для отслеживания, когда ваше приложение открыто, но ваша задача находится за пределами экрана. - person evaneus; 15.09.2011