2010-09-28 35 views
13

Chúng tôi đang lập kế hoạch sử dụng Google Analytics để theo dõi các giới thiệu nhấp qua quảng cáo, thông qua Android Market, đến ứng dụng của chúng tôi.Tải thẻ giới thiệu Google Analytics của Android

Theo thẻ Google Documentation, thẻ liên kết giới thiệu đi qua mục đích và được thư viện Google Analytics ghi lại tự động.

Điều đó thật tuyệt, nhưng chúng tôi cần trích xuất thẻ giới thiệu đó cho phân tích nội bộ của riêng chúng tôi. Tài liệu hướng dẫn chi tiết về cách lấy nó ra khỏi mục đích khởi chạy ban đầu và hướng dẫn cách mô phỏng điều này trước khi phát trực tiếp.

Có ai có kinh nghiệm với điều này không?

Trả lời

23

Tôi đã tiếp tục và xuất bản ứng dụng công cụ tìm điểm ảnh chết để chơi với mục đích tìm kiếm. Vì một số lý do, khi tôi đăng ký hai máy thu phát sóng khác nhau (ví dụ: com.google.android.apps.analytics.AnalyticsReceiver và của riêng tôi), tôi chưa bao giờ nhận được nó.

Vì vậy, thay vào đó, tôi đã đăng ký chỉ người nhận của riêng tôi, xử lý thông tin và chuyển nó đến Google Analytics. Không biết làm thế nào kosher này, nhưng nó hoạt động. Mã sau.

public class ZSGoogleInterceptor extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 

     String referrerString = extras.getString("referrer"); 
     // Next line uses my helper function to parse a query (eg "a=b&c=d") into key-value pairs 
     HashMap<String, String> getParams = Utility.getHashMapFromQuery(referrerString); 
     String source = getParams.get("utm_campaign"); 

     if (source != null) { 
      SharedPreferences preferences = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE); 
      Editor preferencesEditor = preferences.edit(); 
      preferencesEditor.putString("ga_campaign", source); 
      preferencesEditor.commit(); 
     } 

     // Pass along to google 
     AnalyticsReceiver receiver = new AnalyticsReceiver(); 
     receiver.onReceive(context, intent); 
    } 

} 

Sau đó, khi ứng dụng của bạn thực sự được khởi chạy, bạn có thể kéo giá trị ra khỏi tùy chọn được chia sẻ và chuyển nó cùng với đăng ký người dùng hoặc bất kỳ thứ gì. Tôi đã sử dụng thẻ chiến dịch cho mục đích của mình, nhưng bạn có thể lấy bất kỳ tham số nào bạn muốn trong chuỗi giới thiệu được tạo with this tool.

+4

Lý do nhiều hơn một máy thu doesn' t làm việc là bạn không thể đăng ký nhiều hơn một máy thu cho cùng một bộ lọc ý định. Đây là điểm của tài liệu gây nhầm lẫn ở đây - http://code.google.com/apis/analytics/docs/mobile/android.html#google-play-tracking - có vẻ như bạn không thể có thêm hơn một trong những loại * BroadcastReceiver trong một ứng dụng, điều này tất nhiên là không đúng sự thật. –

+0

@DaveSims - Vâng, họ đã thêm ghi chú đó lâu sau khi tôi thực hiện bài đăng này. Không rõ ràng lắm, tôi đồng ý. – DougW

+0

@DougW que của tôi là cách tôi có thể nhận được từ liên kết này "http://market.android.com/details?id=com.lifestreet.android.TestInstallationIntent&referrer=bb%3DAAAAAAAAAA&feature=search_result" referre = bb giả sử tôi có thêm trong mã menifest bốn dòng mặc định của google com.google.android.apps.analytics.AnalyticsReceiver tôi cần thêm bất kỳ trong mã của tôi – Khan

7

@DougW 's câu trả lời được cập nhật cho Analytics SDK 4

https://developers.google.com/analytics/devguides/collection/android/v4/campaigns

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.util.Log; 

import com.google.android.gms.analytics.CampaignTrackingReceiver; 

import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 
import java.util.LinkedHashMap; 
import java.util.Map; 

/** 
* Created by dave on 15-05-05. 
*/ 
public class ReferrerReceiver extends BroadcastReceiver { 

    public static final String REFERRER = "REF"; 

    public static final String UTM_CAMPAIGN = "utm_campaign"; 
    public static final String UTM_SOURCE = "utm_source"; 
    public static final String UTM_MEDIUM = "utm_medium"; 
    public static final String UTM_TERM = "utm_term"; 
    public static final String UTM_CONTENT = "utm_content"; 

    private final String[] sources = { 
      UTM_CAMPAIGN, UTM_SOURCE, UTM_MEDIUM, UTM_TERM, UTM_CONTENT 
    }; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Bundle extras = intent.getExtras(); 

     String referrerString = extras.getString("referrer"); 

     try { 
      Map<String, String> getParams = getHashMapFromQuery(referrerString); 

      SharedPreferences preferences = context 
        .getSharedPreferences(REFERRER, Context.MODE_PRIVATE); 

      SharedPreferences.Editor preferencesEditor = preferences.edit(); 

      for (String sourceType : sources) { 
       String source = getParams.get(sourceType); 

       if (source != null) { 

        preferencesEditor.putString(sourceType, source); 

       } 
      } 

      preferencesEditor.commit(); 
     } catch (UnsupportedEncodingException e) { 

      Log.e("Referrer Error", e.getMessage()); 
     } finally { 

      // Pass along to google 
      CampaignTrackingReceiver receiver = new CampaignTrackingReceiver(); 
      receiver.onReceive(context, intent); 
     } 



    } 

    public static Map<String, String> getHashMapFromQuery(String query) 
      throws UnsupportedEncodingException { 

     Map<String, String> query_pairs = new LinkedHashMap<String, String>(); 

     String[] pairs = query.split("&"); 
     for (String pair : pairs) { 
      int idx = pair.indexOf("="); 
      query_pairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), 
        URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); 
     } 
     return query_pairs; 
    } 

} 

Trong bạn file manifest:

 <service android:name="com.google.android.gms.analytics.CampaignTrackingService" /> 
     <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" /> 

     <!-- Make sure this points to the location of Referrer Receiver in your package --> 
     <receiver android:name=".ReferrerReceiver" android:exported="true"> 
      <intent-filter> 
       <action android:name="com.android.vending.INSTALL_REFERRER" /> 
      </intent-filter> 
     </receiver> 
+0

Có thực sự ok khi sử dụng getHashMapFromQuery không? Không có cách nào chính thức hơn để phân tích chuỗi giới thiệu? –

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