web-dev-qa-db-fra.com

Suivre correctement les références d'installation sur le Play Store

J'ai une tâche simple: je veux suivre l'identifiant de référence d'une installation d'application et le transmettre au backend.

Ce que j'ai fait: J'ai créé un lien avec un paramètre supplémentaire referrer et l'ai ajouté au lien d'invitation. Lorsqu’elle est ouverte, la javascript détecte si le navigateur est un navigateur mobile Android, puis prépare une intent et envoie une redirection vers cette intention. Lors de la préparation de l'intention, le champ referrer est extrait de l'URL et ajouté à la intent comme ceci:

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

Et voici mon code pour 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);
    }
}

Donc, je pense que referrer est 4 d'après la intent ci-dessus. Mais la valeur que je reçois est cette chaîne utm_source=google-play&utm_medium=organic

Qu'est-ce que je fais mal et comment puis-je résoudre ce problème pour obtenir la valeur correcte pour le champ referrer?

Modifier

Je n'ai aucun problème à créer l'URL ou à extraire les valeurs du champ referrer une fois l'application installée. 

Une fois que le lien d'invitation a été cliqué via n'importe quel clic ou ouvert directement dans le navigateur mobile, j'utilise ce qui précède pour "ouvrir l'application si elle est déjà installée ou ouvrir la page de l'application sur l'application Play Store pour que les utilisateurs puissent l'installer". 

Le problème est de savoir comment devrais-je transmettre la valeur du champ de référence du lien d'invitation à l'application Play Store par le biais de l'intention ci-dessus afin que le Play Store reçoive cette valeur et la transmette à l'application lors de son installation.

14
Amit Tiwari

Vous devez le tester correctement, je poste le cas d'utilisation de mine, j'espère que cela résoudra votre problème :)

URL de référence - 

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

Code à recevoir 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 "";
}

Maintenant, la partie la plus importante des tests. Vous pouvez tester la référence localement. Il vous suffit de connecter votre téléphone et d’ouvrir l’invite du shell à l’aide de adb Shell. Et diffuser les données de référence. Voici l'exemple de séquence de commandes - 

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"

Additionnel - 

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

Il suffit de voir mon lien. Si l'utilisateur va au magasin de jeu via ce lien, et installe l'application. Ensuite, lors du premier lancement de l’application, votre méthode onReceive sera automatiquement déclenchée et vous obtiendrez toutes les données après le référant =. 

Diffusion -

$ 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"

Pour le tester, vous n'avez pas besoin de publier votre application sur le PlayStore, il suffit de mettre un point de débogage sur le premier point de onReceive, de le lancer en mode débogage et d'activer les séquences de commandes que j'ai postées. Vous obtiendrez toutes les données après la balise "referrer". Vous pouvez ainsi choisir les données à ajouter lors de la création du lien de renvoi.

Faites-moi savoir au cas où vous auriez besoin de plus de précisions :)

7
Neo

Il est préférable et plus fiable de suivre le référant via Firebase Dynamic Link.

Ci-dessous, comment ça marche.

https: // domaine /? link = your_deep_link & apn = nom_package [& amv = version_ministre] [& ad = 1] [& al = lien_Android] [& afl = lien_de_retour]

Voici l'exemple de lien après avoir renseigné les paramètres.

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 = exemple

Bien sûr, vous pouvez raccourcir le lien à quelque chose comme https://example.app.goo.gl/abcde directement sur la console Firebase. La configuration du lien dynamique ne prendra que quelques minutes.

Ensuite, dans l'application Android sur votre Activity principale, vous pouvez appeler AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, false) pour récupérer les informations sur les liens.

Plus d'informations peuvent être trouvées ici https://firebase.google.com/docs/dynamic-links/

4
Pongpat

J'ai utilisé le marquage utm 

vous pouvez voir la source complète à https://github.com/dheeraj9198/Utm-Test

Je fournis le code de base

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

--------------------------Manifeste----------------------- ----------------

        <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>
0
Dheeraj Sachan