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:
- Intentos de Android: Inicia la actividad usando el nombre de clase de otra aplicación que tiene el mismo sharedUserId
- Java.lang.RuntimeException: Parcel android.os.Parcel: Código desconocido del tipo de desconexión
- NullPointerException mientras se envía StringArray usando Parcelable
- Intención de la cámara Android Guardar imagen Paisaje cuando se toma Retrato
- Cómo en Android pasar un objeto a un nuevo propósito
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.
- Android Intención de inicio Actividad principal de la aplicación
- ¿Cómo puedo enviar un archivo kml a Google Earth, como MyTracks (código abierto)?
- Recuperar el valor de incremento automático después de insertar
- El selector de intenciones de Android tarda en aparecer
- Abrir el navegador nativo de una aplicación de Android
- Mostrar el calendario en la vista de mes con la intención
- ¿Por qué es nulo el objeto parcelable en la actividad de recepción?
- ¿Cómo almacenar permanentemente objeto personalizado parcelable?
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& 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.
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>
- ¿Cuál usar WebView o TextView en una lista con datos HTML en ella?
- Cómo cambiar el tamaño de un elemento de Java Script para que se ajuste a su ventana de contenedor