¿Cómo obtener referencias usando google track en android?
Frecuentes
Visto 6,530 veces
5
Quiero implementar la pista de referencia de instalación y quiero un parámetro de referencia y almacenarlo en la base de datos de back-end. He visto muchos ejemplos o preguntas similares. Obtener la etiqueta de referencia de Google Analytics para Android or El seguimiento de la campaña de Google Analytics para Android no aparece pero no entiendo la forma en que he generado enlaces y prueba el código
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;
}
}
Después de eso, lo intenté en mi actividad.
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+" ");
al hacer clic en el botón pero no obtener la salida deseada
quiero algo como de
"https://play.google.com/store/apps/details?id=com.lifestreet.android.TestInstallationIntent&referrer=bb%3DAAAAAAAAAA&feature=search_result%22"
Ans
referrer=bb
cualquier ayuda me muy apreciada Gracias de antemano.
3 Respuestas
1
No estoy seguro de que Google te permita enviar información arbitraria. Intenta usar el generador para crear la url.
https://developers.google.com/analytics/devguides/collection/android/devguide#google-play-builder
Respondido el 12 de junio de 12 a las 08:06
0
He tenido un problema similar. Descubrí que era un problema del ciclo de vida: los receptores onReceive de install_referrer se invocan DESPUÉS de onResume() de mi aplicación, en el MISMO hilo principal, por lo que cualquier intento de leer el archivo de referencia durante onResume() falla. Aquí está el logcat para probarlo, esto fue 100% reproducible una y otra vez en 2 dispositivos con Android 4.2.1 y 4.4.2:
Primero, Play Store transmite el referente al paquete en un proceso separado (almacén):
11-04 14:17:51.558: D/Finsky(1737): [1] ReferrerRebroadcaster.doBroadcastInstallReferrer: Delivered referrer for com.xxx.demo
La aplicación onResume() - ¡todavía no hay activación de los receptores de transmisión! S
11-04 14:17:51.888: D/XXX Main Activity(22730): onResume
La aplicación intenta leer el referente (que los receptores deberían haber almacenado usando getSharedPreferences.putString):
11-04 14:17:51.958: I/XXX(22730): Extracted install referrer:
Solo que ahora los receptores se invocan en el hilo principal y en breve intentarán escribir la referencia en un archivo:
11-04 14:17:51.918: I/XXX(22730): Received install referrer: abcdefg
Como puede ver, onResume() no tiene ninguna posibilidad de leer el archivo, por lo que la extracción no arroja nada. Sin embargo, si cierro la aplicación y la vuelvo a abrir, onResume ahora puede encontrar el archivo y la cadena de referencia se procesa, pero no en el primer lanzamiento :)
¡Espero que esto ayude!
respondido 04 nov., 14:13
0
Google Analytics usa constantes arbitrarias en su SDK. para campaing_source es &cs.
Respondido 03 Feb 15, 17:02
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas android tracking or haz tu propia pregunta.
¿Lo hiciste funcionar? En caso afirmativo, ¿sigue funcionando para usted? - Gopinath
Me devuelve nulo en todos los campos - Ivan
¿Sigue funcionando para ti? - Paresh Mayani
@Khan... Obtuviste la solución de tu problema... También me he quedado atascado en este problema... Por favor, ayúdame a resolver este problema. Ravindra Kushwaha