Ich versuche, einen Broadcast-Receiver zu registrieren, der die Absichten "com.Android.vending.INSTALL_REFERRER" erfasst, nachdem Android eine Android-App installiert hat.
Ich verfolge die Details hier: http://code.google.com/mobile/analytics/docs/Android/#referrals
Ich kann jedoch Google Analytics nicht verwenden. Daher habe ich eine eigene Lösung erstellt. Ich habe der Manifestdatei Folgendes hinzugefügt:
<receiver Android:name="com.test.Receiver" Android:exported="true">
<intent-filter>
<action Android:name="com.Android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
und erstellte eine grundlegende BroadcastReceiver-Klasse:
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);
}
}
Wenn die App installiert ist, scheint der Empfänger den Intent jedoch nicht zu fangen (wenn der Intent überhaupt ausgestrahlt wird?) Und ich bekomme keine Protokollierungsausgabe.
Bin ich irgendwo falsch oder startet der Markt diese Intents nicht mehr, wenn eine App installiert wird?
Ich würde versuchen zu helfen, wer wie ich install_referrer nicht zum Laufen bringt und der KEINE nützlichen Informationen über diese Funktionen findet.
Anmerkungen:
com.Android.vending.INSTALL_REFERRER
wird während des Installationsvorgangs abgefangen. Nicht, wenn die Anwendung zum ersten Mal gestartet wird.extras.getString("referrer")
.. ist festgelegt, der Inhalt kann jedoch ein beliebiger Zeichenfolgewert sein, der die http-Get-Syntax ...referrer=thatsthevalue&thisisnot=xxx
berücksichtigt.Der obige Code ist in Ordnung, nur einige Erklärungen, um die Informationen zu vervollständigen:
<receiver>
-Tags müssen sich innerhalb der <application>
-Tags befinden.aber das hier
Natürlich müssen Sie dem Link vom mobilen Gerät aus folgen. Die einzige Möglichkeit für einen vollständigen Test besteht darin, eine Testanwendung auf dem Markt zu veröffentlichen.
Und eine letzte und persönliche Notiz.
Ich verstehe nicht, warum diese Informationen vollständig ausgelassen werden, und ich hoffe, dass Google diese Details ausführt.
Dies könnte etwas spät sein, aber Sie können den Installationsempfänger ohne Google Play testen. Verwenden Sie einfach ADB :)
Führen Sie dies von adb.exe aus
adb Shell
am broadcast -a com.Android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es "referrer" "test_referrer=test"
Wenn Sie in Ihrem BroadcastReceiver ein Protokoll eingerichtet haben, wird es in LogCat angezeigt.
Hoffe das hilft!
Okay, ich fand den Grund, warum der Intent nicht gestartet wurde. Anscheinend MÜSSEN Sie dieselben Parameternamen verwenden, die hier angegeben sind: http://code.google.com/mobile/analytics/docs/Android/#referrals
Sie können nicht Ihre eigenen Parameternamen verwenden, wie ich es getan habe: S
Ich denke, diese Antworten müssen vor Android 3.1 geschrieben worden sein - weil sich die Dinge auf eine Art und Weise verändert haben.
Das System kennzeichnet die App jetzt als inaktiv, wenn sie installiert ist. Sie erhalten INSTALL_REFERRER oder andere Broadcasts erst dann, wenn der Benutzer die App explizit durch Ausführen (oder Platzieren des Widgets) aktiviert.
Bitte beachten Sie, dass dies nicht die erste Absicht ist, sondern nur eine Android-Marktabsicht, die mir der Google-Android-Markt gesendet wird .. Wenn Sie die App über eine andere Ressource als den Android-Markt installieren, wird sie nicht ausgelöst.
Verwenden Sie den Link, den Sie dort erstellen können: http://code.google.com/mobile/analytics/docs/Android/#Android-market-tracking Holen Sie den Referrer aus der Absicht heraus und nehmen Sie ihn auseinander um die verschiedenen Parameter zu erhalten
referrer = intent.getStringExtra("referrer");
Map<String, String> params = Toolbox.getQueryMap(referrer);
P.S. Sie müssen nicht lesen, um die Geräte-ID/IMEI zu lesen, wie dies bei einigen Apps der Fall ist. Sie sollten Ihre Benutzer nicht ausspionieren wollen.
Ich stimme zu, dass die Dokumentation von Google nicht die beste ist. Ich habe jedoch nur in der Lage sein zu schießen, indem ich die App tatsächlich auf den Marktplatz hochlade und sie dann herunterlade/installiere. Die Absicht wird sofort nach dem Download/der Installation gestartet - der Benutzer muss die App nicht starten. Ich benutze dies, um auch einen Hintergrunddienst zu starten.
Tatsächlich könnte es irgendwelche Links wie market: // ... oder http: // market ... geben. Entweder funktioniert das einwandfrei ..__ im Referrer-Feld. Es funktioniert gut mit jedem Text dort.
Das Hauptproblem, das dieser Ereignistyp "com.Android.vending.INSTALL_REFERRER" nicht per Broadcast sendet. Dieses Ereignis wird NUR in die gerade installierte Anwendung übernommen.
UPD: Es gibt nur einen Weg, um es zu testen: Stellen Sie Ihre App auf dem Markt bereit und installieren Sie sie dann auf dem Telefon.
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"
Verwenden Sie Google Play Referrer API (ab 20. November 2017) sehr einfach und sicher, wie ich hier geantwortet habe