2010-11-04 19 views
64

Sto tentando di registrare un Broadcast Receiver che cattura intenti "com.android.vending.INSTALL_REFERRER" lanciati da Android dopo che un'app è stata installata dal Market.Ottieni referrer dopo aver installato l'app da Android Market

Seguo i dettagli qui: http://code.google.com/mobile/analytics/docs/android/#referrals

Tuttavia, non posso utilizzare Google Analytics in modo ho creato la mia soluzione. Ho aggiunto il seguente al mio file manifesto:

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

e creato una classe BroadcastReceiver base:

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

Tuttavia, quando l'applicazione è installato il ricevitore non sembra prendere l'Intent (se l'intento viene persino trasmesso?) e non ottengo output di registrazione.

Sto sbagliando da qualche parte o il mercato non lancia più questi Intenti quando viene installata un'app?

+1

Ho risposto a questa stessa domanda qui http://stackoverflow.com/questions/3817030/get-android-google-analytics-referrer-tag/3945100#3945100 – DougW

+1

Vale la pena notare che, a causa di un bug nella versione più recente dell'app Android Market, la stringa del referrer attualmente non funziona. Puoi iniziare il bug qui per attirare l'attenzione di Google su di esso: http://code.google.com/p/android/issues/detail?id=19247 – plowman

+0

Qualcuno sa se c'è un modo per ricevere questa trasmissione quando ALTRO le app, oltre le mie, vengono installate? –

risposta

5

Ok, ho trovato il motivo per cui l'intenzione non è stata avviata. A quanto pare è necessario utilizzare gli stessi nomi dei parametri come descritto qui: http://code.google.com/mobile/analytics/docs/android/#referrals

Non puoi utilizzare i propri nomi di parametri come stavo facendo: S

+0

puoi aiutarmi nella mia domanda http: // stackoverflow.it/questions/10431018/how-to-get-referrer-using-google-track-in-android – Khan

+0

Link aggiornato https://developers.google.com/analytics/devguides/collection/android/devguide#google-play- tracking – eveliotc

+0

@Jake \t Potete dirmi quali parametri? In realtà ho lo stesso problema come te –

45

vorrei cercare di aiutare chi, come me, non riesce a fare il lavoro install_referrer e che non trova alcuna informazione utile su queste funzionalità.

Note:

  1. L'intento com.android.vending.INSTALL_REFERRER sarà preso durante il processo di installazione, non quando l'applicazione viene avviata per la prima volta .
  2. Il referente ... extras.getString("referrer") .. è fisso, ma il contenuto può essere qualsiasi valore stringa che rispetta il GET HTTP sintassi ... referrer=thatsthevalue&thisisnot=xxx

Il codice di cui sopra è a posto, solo alcune spiegazioni per completare le informazioni :

  1. Manifest Android. I tag <receiver> devono trovarsi all'interno dei tag <application>.
  2. l'URL corretto per collegare il mercato non è il risultato delle famose forme di Google in sdk

ma questo

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

Ovviamente, è necessario seguire il link dal cellulare dispositivo e l'unico modo per un test completo è pubblicare un'applicazione di test sul mercato.

E una nota finale e personale.

Non capisco perché quelle informazioni siano state omesse completamente e spero che Google agirà per dettagliarlo.

+2

Per testare, vedere questa risposta: http://stackoverflow.com/questions/5890914/how-to-test-android-referral-tracking/6966718#6966718 – emmby

+1

INSTALL_REFERRER funziona come documentato e non c'è Niente di male con gli URL generati dai "famosi moduli Google" perché sono progettati per essere ricevuti da GA SDK. Il tuo codice funziona solo se prevedi di pubblicare su GA manualmente o di integrarlo con un'altra piattaforma di analisi. Vedi il link sopra se vuoi catturare il referrer e usare ancora l'SDK di GA. –

+0

_il tag '' deve trovarsi all'interno del ' tag_. Questo non è spiegato nella guida di sviluppo SDK analytics, né la compilazione fallisce se lo fai diversamente. Quindi grazie Tobia! –

2

Accetto che la documentazione di Google non sia la migliore.Tuttavia, sono stato in grado di attivare l'intento solo caricando effettivamente l'app sul Market Place e quindi scaricandola/installandola. L'intento viene avviato subito dopo il download/l'installazione - l'utente non deve avviare l'app. Sto usando questo per avviare anche un servizio in background.

+0

Puoi indicare quale versione di Android tu sono stati in grado di raggiungere questo? Questo comportamento è ancora valido per 2.3.3 e ICS (4.0)? – rycfung

1

In realtà ci potrebbero essere tutti i link come mercato: // ... o http: // di mercato ... entrambi funzionano bene. Inoltre non importa che tipo di parametri saranno nel campo referrer. Funziona bene con qualsiasi testo in là.

Il problema principale che questo tipo di evento "com.android.vending.INSTALL_REFERRER" non viene inviato per trasmissione. Questo evento va SOLO nell'applicazione appena installata.

UPD: E c'è solo un modo per testarlo: distribuire l'app nel Market e quindi installarla sul telefono.

+0

Credo che INSTALL_REFERRER non funzioni per il protocollo http. Almeno, non più se lo avesse fatto prima. Fare riferimento a questa documentazione e al punto 2 della nota sotto problemi noti: https://developers.google.com/analytics/devguides/collection/android/v2/campaigns#known-issues – rycfung

+0

@rycfung Penso che significhi solo non funzionerà quando si fa clic su "Installa" dal Web, non se si apre l'app Play Store da un collegamento Web –

2

Si prega di notare che questo non è il primo intento di partenza, ma solo un intento relativo al mercato Android che viene inviato il mio mercato Android di Google. Se si installa l'app attraverso una risorsa diversa da quella del mercato Android, non verrà avviata.

Usa il link che si può costruire lì: http://code.google.com/mobile/analytics/docs/android/#android-market-tracking ottenere il referrer dal intento e smontarlo per ottenere i diversi parametri

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

P.S. Non è necessario leggere per leggere il deviceid/IMEI per fare ciò, come fanno alcune app. Non dovresti voler spiare i tuoi utenti.

5

Penso che queste risposte devono essere state scritte pre-Android 3.1 - perché le cose sono cambiate in un modo di importazione.

Il sistema ora contrassegna l'app come inattiva quando sono installati: non riceveranno INSTALL_REFERRER o qualsiasi altra trasmissione finché l'utente non attiva esplicitamente l'app eseguendola (o posizionando il widget).

+0

Qualsiasi documentazione per supportare questo? Non riesco ancora a vedere alcuna trasmissione inviata prima/dopo aver lanciato la mia app installata nonostante l'apertura del Play Store con il parametro referrer – rycfung

+0

Tom, penso che funzioni e sia stato testato in 4.x. Da quando sono stati introdotti i controlli di avvio di Android 3.1 sulle applicazioni arrestate. [http://developer.android.com/about/versions/android-3.1.html](http://developer.android.com/about/versions/android-3.1.html) Si noti che il sistema aggiunge FLAG_EXCLUDE_STOPPED_PACKAGES a tutti broadcast intents. Tuttavia, un servizio o un'applicazione in background può sovrascrivere questo comportamento aggiungendo il flag FLAG_INCLUDE_STOPPED_PACKAGES per trasmettere intenti che dovrebbero essere autorizzati ad attivare le applicazioni arrestate. Spero che questo possa essere utile. – androidyue

16

Questo potrebbe essere un po 'in ritardo, ma è possibile verificare il referrer installare senza l'utilizzo di Google Play, basta usare ADB :)

Esegui questo da adb.exe

adb shell 

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

Se è stata la registrazione di installazione nel tuo BroadcastReceiver, lo vedrai popup in LogCat.

Spero che questo aiuti!

+5

sulla coppia di valori chiave OS X dell'opzione -e non deve essere inclusa con i codici doppi. Quindi sopra il comando sarà: 'adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es referrer test_referrer = test' –