2010-11-04 12 views
64

Estoy intentando registrar un Broadcast Receiver que capte las intenciones "com.android.vending.INSTALL_REFERRER" lanzadas por Android después de que se haya instalado una aplicación en Market.Obtenga referrer después de instalar la aplicación desde Android Market

estoy siguiendo los detalles aquí: http://code.google.com/mobile/analytics/docs/android/#referrals

Sin embargo, no puede utilizar Google Analytics, así que he creado mi propia solución. He añadido lo siguiente al archivo de manifiesto:

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

y ha creado una clase BroadcastReceiver básica:

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

Sin embargo, cuando la aplicación está instalada, no parece que el receptor para captar la intención (si ¿El intento se transmite incluso?) y no obtengo ningún resultado de registro.

¿Me estoy equivocando en alguna parte o el Market ya no está lanzando estos Intents cuando se instala una aplicación?

+1

Respondí esta misma pregunta aquí http://stackoverflow.com/questions/3817030/get-android-google-analytics-referrer-tag/3945100#3945100 – DougW

+1

Vale la pena señalar que, debido a un error en la última versión de la aplicación Android Market, la cadena de referencia no funciona actualmente. Puede destacar el error aquí para ayudar a llamar la atención de Google sobre él: http://code.google.com/p/android/issues/detail?id=19247 – plowman

+0

¿Alguien sabe si hay una manera de recibir esta transmisión cuando OTROS? aplicaciones, junto a la mía, se está instalando? –

Respuesta

5

Bien, entonces encontré la razón por la cual Intent no se lanzaba. Al parecer, usted debe utilizar el mismo nombres de los parámetros como se indica aquí: http://code.google.com/mobile/analytics/docs/android/#referrals

Usted no puede usar sus propios nombres de los parámetros ya que estaba haciendo: S

+0

me pueden ayudar en mi pregunta http: // stackoverflow.com/questions/10431018/how-to-get-referrer-using-google-track-in-android – Khan

+0

Enlace actualizado https://developers.google.com/analytics/devguides/collection/android/devguide#google-play- seguimiento – eveliotc

+0

@Jake \t ¿Puede decirme qué parámetros? En realidad tengo el mismo problema que usted –

45

me gustaría tratar de ayudar a que, como yo, deja de hacer el trabajo INSTALL_REFERRER y que no encuentran NINGUNA información útil sobre estas características.

Notas:

  1. La intención com.android.vending.INSTALL_REFERRER serán capturados durante el proceso de instalación, no cuando la aplicación se inicia por primera vez .
  2. la de referencia ... .. extras.getString("referrer") es fijo sino que el contenido puede ser cualquier valor de cadena que respeta la sintaxis HTTP GET ... referrer=thatsthevalue&thisisnot=xxx

El código anterior está bien, sólo algunas explicaciones para completar la información :

  1. Android Manifest. Las etiquetas <receiver> deben estar dentro de las etiquetas <application>.
  2. la URL correcta para enlazar el mercado no es el resultado de las famosas formas de Google en SDK

pero éste

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

Obviamente, es necesario seguir el enlace desde el móvil dispositivo y la única forma de realizar una prueba completa es publicar una aplicación de prueba en el mercado.

Y una nota final y personal.

No entiendo por qué esa información se omite por completo y espero que Google actúe para detallarla.

+2

Para probar, vea esta respuesta: http://stackoverflow.com/questions/5890914/how-to-test-android-referral-tracking/6966718#6966718 – emmby

+1

INSTALL_REFERRER funciona como está documentado y existe No hay nada de malo con las URL generadas por los "famosos formularios de Google" porque están diseñados para ser recibidos por el SDK de GA. Su código solo funciona si planea publicar en GA manualmente o integrarse con otra plataforma de análisis. Consulte el enlace de arriba si desea capturar el referente y aún usar el GA SDK. –

+0

_ la etiqueta '' debe estar dentro de '' tag_. Esto no se explica en la guía de desarrollo de SDK de análisis, ni tampoco la compilación falla si lo hace de otra manera. Entonces, gracias Tobia! –

2

Acepto que la documentación de Google no es la mejor.Sin embargo, solo pude obtener la intención de disparar al cargar la aplicación en Market Place y luego descargarla/instalarla. El intento se inicia inmediatamente después de la descarga/instalación: el usuario no tiene que iniciar la aplicación. Estoy usando esto para comenzar un servicio de fondo también.

+0

¿Puede indicar qué versión de Android tiene? fueron capaces de lograr esto? ¿Este comportamiento sigue siendo válido para 2.3.3 e ICS (4.0)? – rycfung

1

En realidad no puede haber ningún enlace como mercado: // ... o http: // mercado ... o bien funcionan bien. También no importa qué tipo de parámetros estarán en el campo de referencia. Funciona bien con cualquier texto allí.

El problema principal que este tipo de evento "com.android.vending.INSTALL_REFERRER" no envía por difusión. Este evento SÓLO va a la aplicación recién instalada.

UPD: Y solo hay una forma de probarlo: despliega tu aplicación en Market y luego instálala en el teléfono.

+0

Creo que INSTALL_REFERRER no funciona para el protocolo http. Al menos, ya no si lo hizo antes. Consulte esta documentación y anote el punto n. ° 2 en problemas conocidos: https://developers.google.com/analytics/devguides/collection/android/v2/campaigns#known-issues – rycfung

+0

@rycfung Creo que eso solo significa que no funcionará cuando haga clic en "instalar" desde la web, no si abre la aplicación Play Store desde un enlace web –

2

Tenga en cuenta que este no es el primer intento de inicio, sino solo un intento relacionado con el mercado de Android que se envía al mercado de Android de Google. Si instala la aplicación a través de un recurso diferente al del mercado Android, no se activará.

Utilice el enlace que se puede construir allí: http://code.google.com/mobile/analytics/docs/android/#android-market-tracking obtener la URL de referencia de la intención y lo desarme para obtener los diferentes parámetros

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

P. S. No necesita leer para leer el deviceid/IMEI para hacer esto, como lo hacen algunas aplicaciones. No deberías querer espiar a tus usuarios.

5

Creo que estas respuestas deben haberse escrito antes de Android 3.1, porque las cosas han cambiado de una manera importante.

El sistema ahora marca la aplicación como latente cuando se instalan; no recibirán INSTALL_REFERRER ni ninguna otra transmisión hasta que el usuario active explícitamente la aplicación ejecutándola (o colocando el widget).

+0

¿Alguna documentación para respaldar esto? Todavía no puedo ver ninguna transmisión que se envíe antes/después de que inicie mi aplicación instalada a pesar de abrir Play Store con el parámetro de referencia – rycfung

+0

Tom, creo que funciona y lo he probado en 4.x. Desde Android 3.1 Lanzamiento controles en aplicaciones detenidas se ha introducido. [http://developer.android.com/about/versions/android-3.1.html](http://developer.android.com/about/versions/android-3.1.html) Tenga en cuenta que el sistema agrega FLAG_EXCLUDE_STOPPED_PACKAGES a todos intenciones de transmisión. Sin embargo, un servicio o aplicación en segundo plano puede anular este comportamiento agregando el indicador FLAG_INCLUDE_STOPPED_PACKAGES para transmitir intenciones que se deben permitir para activar aplicaciones detenidas. Espero que esto pueda ser útil. – androidyue

16

Esto podría ser un poco tarde, pero se puede probar la de referencia instalar sin necesidad de utilizar Google Play, sólo tiene que utilizar ADB :)

Ejecutar esto desde 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 ha de registro de instalación en su BroadcastReceiver, lo verá emergente en LogCat.

Espero que esto ayude!

+5

en el par de valores clave OS X de la opción -e no es necesario incluir códigos dobles. Así que el comando anterior será: 'adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n your.package/path.to.your.BroadcastReceiver --es referrer test_referrer = test' –

Cuestiones relacionadas