1

Я отправляю этот вопрос, потому что я не могу найти ясный ответ. :)Google Analytics для нескольких мероприятий Android

Im новое для Android и в настоящее время приложение, которое имеет несколько видов деятельности. Я использую сервисы Google для Google Analytics. Следуя руководству google dev, мне удалось заставить его работать. Но всякий раз, когда я создаю новый Activity (экран), я должен повторять одни и те же коды внутри каждого класса активности.

Ex: -Activity1.java

public class Activity1 extends Activity { 

HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_activity1); 
    setAnalytics(); 
} 

public enum TrackerName { 
    APP_TRACKER, // Tracker used only in this app. 
    GLOBAL_TRACKER, // Tracker used by all the apps from a company. 
    ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company. 
} 

synchronized Tracker getTracker(TrackerName trackerId) { 
    if (!mTrackers.containsKey(trackerId)) { 
     GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
     Tracker tracker = analytics.newTracker(R.xml.global_tracker); 
     mTrackers.put(trackerId, tracker); 
    } 
    return mTrackers.get(trackerId); 
} 

private void setAnalytics(){ 
    // Get tracker. 
    Tracker t = getTracker(TrackerName.APP_TRACKER); 
    // Set screen name. 
    //t.setScreenName("Activity 1"); 
    // Send a screen view. 
    t.send(new HitBuilders.AppViewBuilder().build()); 
} 
} 

Мой global_tracker.xml является

<!-- Enable automatic Activity measurement --> 
<bool name="ga_autoActivityTracking">true</bool> 

<!-- The screen names that will appear in reports --> 
<screenName name="com.test.activity1">Activity1</screenName> 
<screenName name="com.test.activity2">Activity2</screenName> 

<!-- The following value should be replaced with correct property id. --> 
<string name="ga_trackingId">UA-XXXXXXXX-1</string> 

Эта установка работает просто отлично. Мой вопрос: «Это лучший способ сделать это?». Можно ли использовать другой способ минимизации кодов в каждом классе Activity? Потому что каждый раз мне приходится повторять один и тот же код. Можно ли создать общий класс для хранения этого общего набора кодов и использовать его как объект внутри каждого класса Activity?

Любые идеи парней? Заранее спасибо.

ответ

0

Вы должны поместить этот код внутри Application object вместо настройки в каждом действии.

Пример:

public class AnalyticsSampleApp extends Application { 

    // The following line should be changed to include the correct property id. 
    private static final String PROPERTY_ID = "UA-XXXXX-Y"; 

    public static int GENERAL_TRACKER = 0; 

    public enum TrackerName { 
     APP_TRACKER, // Tracker used only in this app. 
     GLOBAL_TRACKER, // Tracker used by all the apps from a company. eg: roll-up tracking. 
     ECOMMERCE_TRACKER, // Tracker used by all ecommerce transactions from a company. 
    } 

    HashMap<TrackerName, Tracker> mTrackers = new HashMap<TrackerName, Tracker>(); 

    public AnalyticsSampleApp() { 
     super(); 
    } 

    synchronized Tracker getTracker(TrackerName trackerId) { 
     if (!mTrackers.containsKey(trackerId)) { 

      GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 
      analytics.getLogger().setLogLevel(Logger.LogLevel.VERBOSE); 
      Tracker t = (trackerId == TrackerName.APP_TRACKER) ? analytics.newTracker(PROPERTY_ID) 
        : (trackerId == TrackerName.GLOBAL_TRACKER) ? analytics.newTracker(
          R.xml.global_tracker) 
          : analytics.newTracker(R.xml.ecommerce_tracker); 
      t.enableAdvertisingIdCollection(true); 
      mTrackers.put(trackerId, t); 
     } 
     return mTrackers.get(trackerId); 
    } 
} 

Ссылка:

Пожалуйста, проверка пример приложения при условии. Вы можете найти его в своем андроида каталоге SDk на следующий путь:

<android-sdk-directory>/extras/google/google_play_services/analytics/mobileplayground 

Документация:

Google Analytics v4

+0

Тогда как я могу получить его в качестве общего объекта для всех видов деятельности? Должен ли я расширять класс AnalyticsSampleApp? Что-то вроде 'Activity1 расширяет AnalyticsSampleApp' или создает объект класса AnalyticsSampleApp в каждом классе Activity' AnalyticsSampleApp an = new AnalyticsSampleApp() '? Извините, я новичок в Android ... –

Смежные вопросы