Obtener la etiqueta de referencia de Android Google Analytics

Estamos planeando utilizar Google Analytics para rastrear las referencias de clics de anuncios a través de Android Market a nuestra aplicación.

De acuerdo con la Documentación de Google, la etiqueta de referencia proviene de una intención y la biblioteca de Google Analytics la registra automáticamente.

Eso es genial, pero tenemos que extraer esa etiqueta de referencia para nuestros propios análisis internos. La documentación es tímida sobre los detalles sobre cómo extraerla del bash inicial de lanzamiento, y las instrucciones sobre cómo simular esto antes de comenzar a funcionar.

¿Alguien tiene experiencia con esto?

Seguí adelante y publiqué una aplicación de buscador de píxeles muertos para jugar con el espionaje en el bash. Por alguna razón, cuando registré dos receptores de transmisión diferentes (es decir, com.google.android.apps.analytics.AnalyticsReceiver y el mío), nunca los recibí por mi cuenta.

Entonces, en cambio, registré solo mi propio receptor, procesé la información y la pasé a Google Analytics. No sé qué tan kosher es esto, pero funciona. El código sigue.

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 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); } } 

Luego, cuando la aplicación se haya lanzado realmente, puede retirar el valor de las preferencias compartidas y pasarlo junto con el registro de usuario o lo que sea. Utilicé la etiqueta de la campaña para mis propósitos, pero puede tomar cualquier parámetro que quiera de la cadena de referencia creada con esta herramienta .

@DougW’s answer updated for 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 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 getHashMapFromQuery(String query) throws UnsupportedEncodingException { Map query_pairs = new LinkedHashMap(); 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; } } 

En tu archivo manifiesto:

          

Compruebe en:

Obtenga referencia después de instalar la aplicación desde Android Market

para las soluciones.

Tobia