¿Cómo obtener referencias usando google track en android?

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.

preguntado el 03 de mayo de 12 a las 13:05

¿Lo hiciste funcionar? En caso afirmativo, ¿sigue funcionando para usted? -

Me devuelve nulo en todos los campos -

¿Sigue funcionando para ti? -

@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.

3 Respuestas

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

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

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 or haz tu propia pregunta.