Seguimiento correcto de referencias de instalación en Play Store

Tengo una tarea sencilla: Quiero realizar un seguimiento del id de referencia de una instalación de aplicación y pasarla al backend.

Lo que hice: creé un enlace con un parámetro adicional referrer y lo añadí al enlace de invitación. Cuando se abre, el javascript detecta si el navegador es un navegador móvil de Android y luego prepara una intent y emite un redireccionamiento a esa intención. Mientras se prepara la intención, el campo referrer se extrae de la url y se anexa a la intent este modo:

 intent://scan/#Intent;scheme=com.example.android;package=com.example.android&referrer=4;end 

Y aquí está mi código para BroadCastReceiver :

 public class InstallReferrerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { TinyDB tinyDB = new TinyDB(context); String referrer = intent.getStringExtra("referrer"); tinyDB.putString(AppConstants.REFERRAL_ID, referrer); tinyDB.putBoolean(AppConstants.REFERRAL_SENT, false); } } 

Por lo tanto, lo que espero obtener aquí como el valor de referrer es 4 función de la intent anterior. Pero el valor que estoy obteniendo es esta cadena utm_source=google-play&utm_medium=organic

¿Qué estoy haciendo mal y cómo puedo solucionarlo para obtener el valor correcto para el campo de referrer ?

Editar

No tengo ningún problema en la creación de la url o la extracción de valores del campo de referrer una vez que la aplicación está instalada.

Una vez que se hace clic en el enlace de invitación a través de cualquier botón o se abre directamente en el navegador móvil, utilizo lo anterior para "abrir la aplicación si ya está instalada o abrir la aplicación en la aplicación Play Store para que los usuarios la instalen".

El problema es: ¿cómo debo pasar el valor del campo de referencia desde el enlace de invitación a la aplicación Play Store a través de la intención anterior para que Play Store reciba este valor y lo pase a la aplicación cuando esté instalado.

Necesitas probarlo correctamente, estoy publicando el caso de uso de minas, espero que solucione tu problema 🙂

URL de Refferal –

 https://play.google.com/store/apps/details?id=com.mypackage&referrer=utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1 

Código para recibir refferal –

 public static final String KEY_UTM_SOURCE = "utm_source"; public static final String KEY_UTM_CONTENT = "utm_content"; public static final String KEY_UTM_CAMPAIGN = "utm_campaign"; public void onReceive(Context context, Intent intent) { Utils.log("Referral Received"); try { String referrer = intent.getStringExtra("referrer"); if (referrer != null && !referrer.equals("")) { Utils.log("Referral Received - " + referrer); String[] referrerParts = referrer.split("&"); String utmSource = getData(KEY_UTM_SOURCE, referrerParts); String utmContent = getData(KEY_UTM_CONTENT, referrerParts); String utmCampaign = getData(KEY_UTM_CAMPAIGN, referrerParts); if (utmSource != null && utmSource.equals("mobisoc")) { sendLogToMobisocServer(context, utmContent); } else if (utmSource != null && utmSource.equals("app_share")) { RawStorageProvider.getInstance(context).dumpDataToStorage(RaghuKakaConstants.REFFERAL_FOR, utmContent); } updateRKServerForReferral(context, utmSource, utmCampaign, utmContent); } } catch (Exception e) { e.printStackTrace(); } } private String getData(String key, String[] allData) { for (String selected : allData) if (selected.contains(key)) { return selected.split("=")[1]; } return ""; } 

Ahora la parte más importante de pruebas. Puede probar la referencia localmente. Sólo tiene que adjuntar su teléfono, abra el indicador de shell mediante el uso de adb shell . Y difundir los datos de referencia. Aquí está el ejemplo de secuencia de comandos:

 C:\Users\Neo\Desktop>adb shell $ am broadcast -a com.android.vending.INSTALL_REFERRER -n com.mypackage/<className of your ReferralReceiver with package> --es "referrer" "utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1" 

Adicional –

https://play.google.com/store/apps/details?id=com.mypackage&amp; referrer = utm_source% 3Dmobisoc% 26utm_content% 3D {transaction_id}% 26utm_campaign% 3D1

Sólo vea mi enlace. Si el usuario va a la tienda a través de ese enlace, e instala la aplicación. Entonces la primera vez que la aplicación se lanzará, su método onReceive se disparará automáticamente, y obtendrá todos los datos después de referrer =.

Difusión –

 $ am broadcast -a com.android.vending.INSTALL_REFERRER -n com.mypackage/<className of your ReferralReceiver with package> --es "referrer" "utm_source%3Dmobisoc%26utm_content%3D{transaction_id}%26utm_campaign%3D1" 

Para probarlo no necesitas publicar tu aplicación en playstore, solo pon un punto de depuración en el primer punto de onReceive, inicia en el modo de depuración, y dispara las secuencias de comandos que he publicado, obtendrás todos los datos después de la etiqueta "referrer". Por lo tanto, puede decidir qué datos necesita agregar al crear el enlace de referencia.

Déjeme saber en caso de más aclaración que usted necesita 🙂

Es mejor y más fiable para rastrear referrer vía Firebase Dynamic Link.

Debajo de esto cómo funciona.

Https: // domain /? Link = your_deep_link & apn = package_name [& amv = minimum_version] [& ad = 1] [& al = android_link] [& afl = fallback_link]

Aquí está el ejemplo de enlace después de rellenar los parámetros.

https://example.app.goo.gl/?link=https://www.example.com/someresource&apn=com.example.android&amv=3&al=exampleapp://someresource&ibi=com.example.ios&isi=1234567&ius=exampleapp

Por supuesto, puede acortar el enlace a algo como https://example.app.goo.gl/abcde directamente en la consola de Firebase. Sólo tardará unos minutos en configurar el enlace dinámico.

A continuación, en la aplicación de Android en tu Activity principal puedes llamar a AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false) para recuperar la información del enlace.

Puede encontrar más información en https://firebase.google.com/docs/dynamic-links/android

He utilizado el etiquetado utm

Puede ver la fuente completa en https://github.com/dheeraj9198/Utm-Test

Estoy proporcionando el código básico

 public class CustomCampaignTrackingReceiver extends BroadcastReceiver { private static final String TAG = CustomCampaignTrackingReceiver.class.getSimpleName(); private static final Logger LOGGER = LoggerFactory.getLogger(TAG); private static final Marker MARKER = MarkerFactory.getMarker(TAG); @Override public void onReceive(Context context,final Intent intentx) { LOGGER.info(MARKER, "on Receive called"); ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.execute(new Runnable() { @Override public void run() { try { for (String key : intentx.getExtras().keySet()) { try { LOGGER.info(MARKER, key + " => " + String.valueOf(intentx.getExtras().get(key))); } catch (Exception e) { LOGGER.error(MARKER, "caught exception in on key retrieval ", e); } } } catch (Exception e) { LOGGER.error(MARKER, "caught exception in key loop ", e); } } }); executorService.shutdown(); } } 

————————–Manifiesto———————– —————-

  <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:exported="true" > <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> <receiver android:name=".receivers.CustomCampaignTrackingReceiver" android:exported="true" > <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver> 
  • getParcelable devuelve null incluso si el objeto pasado no es null
  • ¿No puedes configurar tanto FLAG_ACTIVITY_SINGLE_TOP como FLAG_ACTIVITY_CLEAR_TOP en una intención?
  • Cómo abrir la galería a través de la intención sin resultado
  • Pasar un doble valor a una clase diferente en Android Java
  • Abrir PDF en un WebView
  • Intención implícita de no ser llamado
  • Utilizar Intents o un bus de eventos para comunicarse dentro de la misma aplicación
  • Hacer ArrayList de objetos personalizados parcelable
  • Android 5.1.1 por defecto la cámara devuelve la intención vacía en onActivityResult después de capturar la imagen
  • Imagen procedente de cámara o galería?
  • Objetivo y Parcelable objeto Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.