2016-02-13 12 views
8

Tôi đang cố gắng chia mã Google Analytics của mình thành một mô-đun riêng biệt (gói com.abc) khỏi ứng dụng chính của tôi (package com.xyz). Tôi đang đối mặt với những vấn đề này:Tệp theo dõi Google Analytics trong mô-đun thư viện Android

  1. Tôi có nên tạo bộ theo dõi cho mô-đun ứng dụng hoặc mô-đun thư viện không?
  2. Tôi nên đặt bộ theo dõi này ở đâu - mô-đun ứng dụng hoặc thư viện?
  3. Mục tiêu của tôi là có tất cả logic tạo và xử lý Analytics trong mô-đun thư viện thông qua một số giao diện. Tôi cũng muốn sử dụng thư viện này cho các dự án khác của mình; vì vậy tôi không muốn đặt các tệp theo dõi trong chính mô-đun thư viện. Có cách nào tôi có thể khởi tạo trình theo dõi trong mô-đun thư viện, nhưng giữ tệp XML trong mô-đun ứng dụng?

Những gì tôi đã cố gắng (và thất bại): file tracker

  1. tôi đã tạo ra cho cả hai com.abc và com.xyz
  2. Tôi đã thử tất cả các hoán vị của cả hai tập tin trong cả hai module; nhưng mô-đun thư viện không thể giải quyết R.xml.global_tracker. Làm quen với Google Analytics Tôi không biết mình có phải sao chép/dán bất kỳ tệp theo dõi nào không. Trước khi tôi tạo mô-đun thư viện, R.xml.global_tracker được tự động giải quyết trong mô-đun chính.
+0

Tôi cũng rất quan tâm đến câu trả lời cho điều này.Bạn đã đưa ra bất kỳ giải pháp nào chưa? – binnyb

+0

Cũng quan tâm đến một thiết lập tương tự cho các ứng dụng iOS, nơi có nhiều mục tiêu- mỗi mục tiêu sử dụng một ID gói khác nhau (do đó cần một dịch vụ google plist khác nhau ...?) – binnyb

+0

bạn không cần phải thực hiện R.xml.global_tracker nữa không. điều này rất dễ cài đặt GA cho dự án của bạn. https://developers.google.com/analytics/devguides/collection/android/v4/#set-up-your-project chỉ cần làm theo điều này. – kimkevin

Trả lời

0

Tôi gặp sự cố tương tự khi triển khai Google Analytics cho dự án với 2 mô-đun (mô-đun ứng dụng chính và mô-đun thư viện). Có một giải pháp thông qua Java Reflection làm thế nào để có được GA tracker trong module thư viện.

  1. Tạo trình theo dõi cho mô-đun ứng dụng chính của bạn.
  2. Đặt trình theo dõi ứng dụng chính của bạn theo sau Google GA Guide.
  3. Thêm phụ thuộc cho Dịch vụ của Google Play vào dự án thư viện của bạn: compile 'com.google.android.gms:play-services-analytics:9.0.0' Điều này là cần thiết để sử dụng các lớp phân tích trong mô-đun thư viện.

Cuối cùng, bạn sẽ có cấu hình GA trong mô-đun ứng dụng chính của mình. Bạn có thể sử dụng nó như được mô tả trong hướng dẫn:

// Obtain the shared Tracker instance in main module 
AnalyticsApplication application = (AnalyticsApplication) getApplication(); 
mTracker = application.getDefaultTracker(); 

Đối với mô-đun thư viện để có được theo dõi từ lớp Application tùy chỉnh của bạn, bạn có thể sử dụng phản ánh:

public Tracker getGATracker(Application application) { 
    Tracker tracker = null; 
    try { 
     Method m = application.getClass().getMethod("getDefaultTracker", (Class<?>[]) null); 
     Object result = null; 
     if (m != null) { 
      result = m.invoke(application, (Object[]) null); 
      if (result != null) { 
       tracker = (Tracker) result; 
      } 
     } 
    } catch (Exception e) { 
     Log.w(TAG, "Can't get GA tracker: ", e); 
    } 

    return tracker; 
} 

Sử dụng phương pháp trên với đoạn này:

// Obtain the shared Tracker instance from main module 
Tracker tracker = getGATracker(getApplication()); 

Vì vậy, bạn có thể sử dụng trình theo dõi GA trong mô-đun thư viện và có cấu hình trong mô-đun chính.

2

Thay vì sử dụng R.xml.global_tracker.Bạn có thể sử dụng mã này trong lớp Ứng dụng của mình.

/** 
* @return tracker 
*/ 
synchronized public Tracker getDefaultTracker() { 
    if (mTracker == null) { 
     GoogleAnalytics analytics = GoogleAnalytics.getInstance(this); 

     // To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG 
     analytics.setLocalDispatchPeriod(1800); 
     mTracker = analytics.newTracker("Tracker code"); 
     analytics.setLocalDispatchPeriod(1); 
     mTracker.enableExceptionReporting(true); 
     mTracker.enableAdvertisingIdCollection(true); 
     mTracker.enableAutoActivityTracking(false); 
    } 
    return mTracker; 
} 

Và sử dụng nó trong các hoạt động/đoạn như thế này:

MyApplication application = (MyApplication) context.getApplication(); 
    Tracker mTracker = application.getDefaultTracker(); 
    mTracker.setScreenName(name); 
    mTracker.send(new HitBuilders.ScreenViewBuilder().build()); 

Điều này có thể giải quyết vấn đề của bạn, không kiểm tra đối với trường hợp của bạn mặc dù.

Các vấn đề liên quan