web-dev-qa-db-fra.com

Obtenir le référent après l'installation de l'application depuis Android Market

J'essaie d'enregistrer un récepteur de diffusion capturant les intentions "com.Android.vending.INSTALL_REFERRER" lancées par Android après l'installation d'une application à partir du Market.

Je suis les détails ici: http://code.google.com/mobile/analytics/docs/Android/#referrals

Cependant, je ne peux pas utiliser Google Analytics, j'ai donc créé ma propre solution. J'ai ajouté ce qui suit à mon fichier manifeste:

<receiver Android:name="com.test.Receiver" Android:exported="true">
<intent-filter>
    <action Android:name="com.Android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>

et créé une classe de base BroadcastReceiver:

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Bundle extras = intent.getExtras();
        String referrerString = extras.getString("referrer");

        Log.w("TEST", "Referrer is: " + referrerString);
    }
}

Cependant, lorsque l'application est installée, le récepteur ne semble pas capter l'intention (si l'intention est même diffusée?) Et je n'obtiens aucune sortie de journalisation.

Est-ce que je me trompe quelque part ou le marché ne lance-t-il plus ces intentions lorsqu'une application est installée?

68
Jake

J'essayerais d'aider ceux qui, comme moi, ne parviennent pas à faire fonctionner install_referrer et qui ne trouvent AUCUNE information utile concernant ces fonctionnalités.

Remarques:

  1. L'intention com.Android.vending.INSTALL_REFERRER sera interceptée Pendant le processus d'installation, pas lorsque l'application démarrera pour la première fois.
  2. Le référent ...extras.getString("referrer") .. est fixé, mais le contenu peut être une valeur de chaîne respectant la syntaxe http get ...referrer=thatsthevalue&thisisnot=xxx

Le code ci-dessus est correct, voici quelques explications pour compléter l'info:

  1. Manifest Android. Les tags <receiver> doivent être à l'intérieur des tags <application>.
  2. L’URL correcte pour relier le marché n’est pas le résultat des célèbres formulaires Google dans sdk

mais celui-ci

http://market.Android.com/details?id=your.application.package.name&referrer=my_referrer_finally_works_fine

De toute évidence, vous devez suivre le lien depuis votre appareil mobile et la seule façon de procéder à un test complet consiste à publier une application de test sur le marché.

Et une note finale et personnelle.

Je ne comprends pas pourquoi ces informations sont complètement omises et j'espère que Google agira pour les détailler.

51
Tobia

Cela peut être un peu tard, mais vous POUVEZ tester le référent d'installation sans utiliser Google Play, utilisez simplement ADB :)

Exécuter ceci depuis adb.exe

adb Shell

am broadcast -a com.Android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es "referrer" "test_referrer=test"

Si vous avez configuré la journalisation dans votre BroadcastReceiver, vous la verrez apparaître dans LogCat.

J'espère que cela t'aides! 

17
Machine Tribe

Bon alors j'ai trouvé la raison pour laquelle l'intention n'était pas lancée. Apparemment, vous DEVEZ utiliser les mêmes noms de paramètres que ceux décrits ici: http://code.google.com/mobile/analytics/docs/Android/#referrals

Vous ne pouvez pas utiliser vos propres noms de paramètre comme je le faisais: S

5
Jake

Je pense que ces réponses doivent avoir été écrites avant Android 3.1 - car les choses ont changé d'une manière importée.

Le système marque maintenant l'application en veille lorsqu'elle est installée. Ils ne recevront INSTALL_REFERRER ni aucune autre diffusion tant que l'utilisateur n'a pas explicitement activé l'application en l'exécutant (ou en plaçant un widget).

5
Tom

Veuillez noter qu'il ne s'agit pas de la première intention de démarrage, mais seulement d'une intention liée au marché Android à laquelle est envoyé le marché de Google Android . Si vous installez l'application via une ressource différente de celle du marché Android, elle ne se déclenchera pas.

Utilisez le lien que vous pouvez créer à cet endroit: http://code.google.com/mobile/analytics/docs/Android/#Android-market-tracking Obtenir le référant de l'intention et le séparer pour obtenir les différents paramètres

referrer = intent.getStringExtra("referrer");
Map<String, String> params = Toolbox.getQueryMap(referrer);

P.S. Vous n'avez pas besoin de lire pour lire le deviceid/IMEI pour faire cela, comme le font certaines applications. Vous ne devriez pas vouloir espionner vos utilisateurs.

2
white_gecko

Je conviens que la documentation de Google n'est pas la meilleure. Cependant, je n'ai réussi à obtenir l'intention de se déclencher qu'en téléchargeant l'application sur Market Place, puis en la téléchargeant/en l'installant. L'intention est lancée immédiatement après le téléchargement/l'installation - l'utilisateur ne doit pas démarrer l'application. J'utilise ceci pour démarrer un service en arrière-plan également.

2
JavaCoderEx

En fait, il pourrait y avoir des liens tels que market: // ... ou http: // market ... soit fonctionner correctement . dans le champ référant. Cela fonctionne très bien avec n'importe quel texte.

Le problème principal que cet événement type "com.Android.vending.INSTALL_REFERRER" n'envoie pas par diffusion Cet événement va SEULEMENT dans l'application qui vient d'être installée.

UPD: Et il n’ya qu’une façon de la tester: déployez votre application sur le marché, puis installez-la sur le téléphone.

1
Vagif
1) Broadcast receiver

public class InstallReferrerReceiver extends BroadcastReceiver {

    String referrer = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction() != null) {
            if (intent.getAction().equals("com.Android.vending.INSTALL_REFERRER")) {

                Bundle extras = intent.getExtras();
                if (extras != null)
                {
                    referrer = extras.getString("referrer");

                    Log.e("Receiver Referral", "===>" + referrer);                  
                    PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER, referrer);

                    /*
                    If you want split username and code use below code...
                    for ex referrer="username12345678890"
                    if(referrer!=null)
                    {
                        String[] referrerParts = referrer.split("(?<=\\D)(?=\\d)");
                        String strName = referrerParts[0];
                        String strCode = referrerParts[1];

                        Log.e("Receiver Referral Code", "===>" + strName);
                        Log.e("Receiver Referral Name", "===>" + strCode);

                        PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER_CODE, strName);
                        PrefUtils.putPrefString(context, PrefUtils.PRF_REFERRER_NAME, strCode);
                    }*/
                }
            }
        }
    }
}

2) Define a receiver in your app manifest.in which com.Android.vending.INSTALL_REFERRER 

<receiver
            Android:name=".services.InstallReferrerReceiver"
            Android:exported="true">
            <intent-filter>
                <action Android:name="com.Android.vending.INSTALL_REFERRER" />
            </intent-filter>
</receiver>

3) Test your app configuration running this command

adb Shell am broadcast -a com.Android.vending.INSTALL_REFERRER -n package_name/broadcast_receiver_path_with_packagename --es referrer "username1234567890"
0
Coldfin Lab

Utilisez Google Play Referrer API (à partir du 20 nov. 2017) très facilement et en toute sécurité, comme je l'ai répondez ici

0
Deven