2012-05-03 49 views
5

Tôi muốn thực hiện cài đặt theo dõi giới thiệu và muốn tham số giới thiệu và lưu trữ trong cơ sở dữ liệu back-end tôi đã thấy nhiều exmple hoặc câu hỏi như trên như Get Android Google Analytics referrer tag hoặc Android Google Analytics Campaign tracking not appearing nhưng không nhận được một cách tôi đã tạo ra những liên kết tới và cố gắng mãcách tải liên kết giới thiệu bằng cách sử dụng bản nhạc google trong android?

package SimpleDemo.ReferralTrack; 

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

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

    public class ReferralReceiver extends BroadcastReceiver 
    { 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    // Workaround for Android security issue: http://code.google.com/p/android/issues/detail?id=16006 
    try 
    { 
     final Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      extras.containsKey(null); 
     } 
    } 
    catch (final Exception e) { 
     return; 
    } 

    Map<String, String> referralParams = new HashMap<String, String>(); 

    // Return if this is not the right intent. 
    if (! intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) { //$NON-NLS-1$ 
     return; 
    } 

    String referrer = intent.getStringExtra("referrer"); //$NON-NLS-1$ 
    if(referrer == null || referrer.length() == 0) { 
     return; 
    } 

    try 
    { // Remove any url encoding 
     referrer = URLDecoder.decode(referrer, "x-www-form-urlencoded"); //$NON-NLS-1$ 
    } 
    catch (UnsupportedEncodingException e) { return; } 

    // Parse the query string, extracting the relevant data 
    String[] params = referrer.split("&"); // $NON-NLS-1$ 
    for (String param : params) 
    { 
     String[] pair = param.split("="); // $NON-NLS-1$ 
     referralParams.put(pair[0], pair[1]); 
    } 

    ReferralReceiver.storeReferralParams(context, referralParams); 
} 

private final static String[] EXPECTED_PARAMETERS = { 
    "utm_source", 
    "utm_medium", 
    "utm_term", 
    "utm_content", 
    "utm_campaign" 
}; 
private final static String PREFS_FILE_NAME = "ReferralParamsFile"; 

/* 
* Stores the referral parameters in the app's sharedPreferences. 
* Rewrite this function and retrieveReferralParams() if a 
* different storage mechanism is preferred. 
*/ 
public static void storeReferralParams(Context context, Map<String, String> params) 
{ 
    SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = storage.edit(); 

    for(String key : ReferralReceiver.EXPECTED_PARAMETERS) 
    { 
     String value = params.get(key); 
     if(value != null) 
     { 
      editor.putString(key, value); 
     } 
    } 

    editor.commit(); 
} 

/* 
* Returns a map with the Market Referral parameters pulled from the sharedPreferences. 
*/ 
public static Map<String, String> retrieveReferralParams(Context context) 
{ 
    HashMap<String, String> params = new HashMap<String, String>(); 
    SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE); 

    for(String key : ReferralReceiver.EXPECTED_PARAMETERS) 
    { 
     String value = storage.getString(key, null); 
     if(value != null) 
     { 
      params.put(key, value); 
     } 
    } 
    return params; 
} 
} 

Sau đó tôi có cố gắng trong hoạt động của tôi

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(DemoActivity.this); 
       String referrers1 =preferences.getString("ga_campaign", "0"); 
       Map<String, String> retrieveReferralParams=ReferralReceiver.retrieveReferralParams(DemoActivity.this); 
       String referrers2= retrieveReferralParams.get("utm_source"); 
       String referrers3= retrieveReferralParams.get("utm_medium"); 
       String referrers4= retrieveReferralParams.get("utm_term"); 
       String referrers5= retrieveReferralParams.get("utm_content"); 
       String referrers6= retrieveReferralParams.get("utm_campaign"); 
       tv.setText(referrers1+" "+referrers2+" "+referrers3+" "+referrers4+" "+referrers5+" "+referrers6+" "); 

vào nút nhấp chuột nhưng không nhận được kết quả mong muốn

tôi muốn một cái gì đó giống như từ

"https://play.google.com/store/apps/details?id=com.lifestreet.android.TestInstallationIntent&referrer=bb%3DAAAAAAAAAA&feature=search_result%22" 
Ans  

    referrer=bb 

giúp tôi đánh giá cao Cảm ơn bạn trước.

+0

Bạn có làm việc đó không? Nếu có, nó vẫn làm việc cho bạn? – Gopinath

+0

Nó trả về null cho tôi trong mọi lĩnh vực – Ivan

+0

Nó vẫn đang chạy cho bạn? –

Trả lời

0

Tôi đã gặp sự cố tương tự. Tìm thấy nó là vấn đề vòng đời: onReceive của bộ thu install_referrer được gọi sau khi onResume() của ứng dụng của tôi, trên chủ đề chính SAME, vì vậy bất kỳ nỗ lực nào để đọc tệp liên kết giới thiệu trong quá trình onResume() đều không thành công. Dưới đây là logcat để chứng minh điều này, điều này có thể được lặp lại 100% trên 2 thiết bị sử dụng Android 4.2.1 và 4.4.2:

Đầu tiên, cửa hàng phát sẽ phát liên kết giới thiệu đến gói trên một quy trình riêng biệt (cửa hàng) :

11-04 14:17:51.558: D/Finsky(1737): [1] ReferrerRebroadcaster.doBroadcastInstallReferrer: Delivered referrer for com.xxx.demo 

Ứng dụng onResume() - vẫn không kích hoạt bộ thu phát sóng! S

11-04 14:17:51.888: D/XXX Main Activity(22730): onResume 

Ứng dụng cố gắng đọc giới thiệu (mà người nhận nên đã được lưu trữ sử dụng getSharedPreferences.putString):

11-04 14:17:51.958: I/XXX(22730): Extracted install referrer: 

Chỉ bây giờ người nhận được viện dẫn trên các chủ đề chính và một thời gian ngắn sẽ cố gắng viết liên kết giới thiệu đến một tệp:

11-04 14:17:51.918: I/XXX(22730): Received install referrer: abcdefg 

Như bạn có thể thấy, onResume() không có cơ hội để đọc tệp, vì vậy việc trích xuất không có gì. Tuy nhiên, nếu tôi đóng ứng dụng và mở lại ứng dụng, onResume hiện có thể tìm thấy tệp và chuỗi liên kết giới thiệu được xử lý - nhưng không phải trên lần khởi chạy đầu tiên :)

Hy vọng điều này sẽ hữu ích!

0

Google Analytics sử dụng các hằng số tùy ý trong SDK của họ. cho campaing_source là & cs.

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