2012-05-03 8 views
5

Chcę zaimplementować zainstalować odsyłających utwór i chcesz parametr odsyłających i przechowywać w bazie końcowej tylnej Widziałem wiele exmple lub pytanie jak na jak Get Android Google Analytics referrer tag lub Android Google Analytics Campaign tracking not appearing ale nie dostać sposób mam wygenerowane linki do i spróbuj kodjak uzyskać stronę odsyłającą za pomocą ścieżki google w systemie 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; 
} 
} 

Potem muszę spróbować w mojej działalności

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+" "); 

na kliknięcia przycisku, ale nie uzyskać pożądany wynik

chcę coś podobnego z

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

    referrer=bb 

każda pomoc mnie bardzo ceniona Z góry dziękuję.

+0

Czy to działa? Jeśli tak, czy nadal działa dla Ciebie? – Gopinath

+0

Powraca dla mnie null we wszystkich polach – Ivan

+0

Czy to nadal działa? –

Odpowiedz

0

miałem podobny problem. Stwierdzono, że jest to problem związany z cyklem życia: funkcja onReceive z odbiorników install_referrer jest wywoływana PO ONResume() mojej aplikacji w głównym wątku SAME, więc każda próba odczytania pliku strony wywołującej podczas onResume() kończy się niepowodzeniem. Oto logcat, aby to udowodnić, był w 100% powtarzalny na 2 urządzeniach z Androidem 4.2.1 i 4.4.2:

Po pierwsze, sklep Play emituje stronę odsyłającą do pakietu w oddzielnym procesie (sklepie) :

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

Aplikacja onResume() - nadal brak aktywacji odbiorników telewizyjnych! S

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

Aplikacja próbuje odczytać skierowania (które odbiorniki powinny być przechowywane przy użyciu getSharedPreferences.putString):

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

Dopiero teraz odbiorniki są wywoływane w głównym wątku i wkrótce spróbować napisać odsyłającą do pliku:

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

Jak widać, onResume() nie ma szans, aby właściwie odczytać plik, więc nic wydajności ekstrakcji. Jeśli jednak zamknę aplikację i otworzę ją ponownie, onResume może teraz znaleźć plik, a ciąg odsyłający zostanie przetworzony - ale nie po pierwszym uruchomieniu :)

Mam nadzieję, że to pomoże!

0

Google Analytics stosuje arbitralne stałe w pakiecie SDK. dla campaing_source to & cs.

Powiązane problemy