2015-06-04 18 views
32

Con le ultime modifiche ad Android GCM viene ora fornito un InstanceIDListenerService per essere in grado di ascoltare gli aggiornamenti dei token sovrascrivendo il metodo onTokenRefresh.Quando verrà chiamato InstanceIDListenerService e come testarlo?

Ma quando verrà chiamato questo metodo? E c'è un modo per testarlo manualmente?

+3

Non esiste un modo semplice per testarlo manualmente, ma dalla [pagina Ciclo di vita dell'ID istanza] (https://developers.google.com/instance-id/#instance_id_lifecycle), afferma che i token sono unici e sicuro, ma la tua app o il servizio ID istanza potrebbero dover aggiornare i token in caso di problemi di sicurezza o quando un utente disinstalla e reinstalla la tua app durante il ripristino del dispositivo. Quindi potresti provare a reinstallare l'app durante il ripristino del dispositivo. – ztan

risposta

41

Per verificare manualmente dalla pista da riga di comando:

adb shell am startservice -a com.google.android.gms.iid.InstanceID --es "CMD" "RST" -n your.package.name/your.own.MyInstanceIDListenerService 

dove:

  • pacchetto della tua app è your.package.name
  • Il nome della classe della vostra implementazione InstanceIDListenerService è your.own.MyInstanceIDListenerService

Questo invierà un intento al servizio con gli extra previsti dalla classe base.

Per far funzionare tutto questo, il servizio deve essere impostato su exportedtemporaneamente:

<service 
    android:name="your.own.MyInstanceIDListenerService" 
    android:exported="true"> 
    <intent-filter> 
     <action android:name="com.google.android.gms.iid.InstanceID"/> 
    </intent-filter> 
</service> 

Nota: questo dovrebbe essere fatto solo temporaneamente e mai essere esportati in produzione o altro altre app potrebbero accedere al tuo servizio.

+13

Se qualcuno ottiene 'Errore: richiede il permesso non esportato da uid' - sarà necessario ** temporaneo ** per cambiare nel file manifest' android: exported = "true" 'per il tuo servizio (e non dimenticare di cambiarlo di nuovo dopo aver finito i test). – Ognyan

+0

Per gradle: your.package.name deve essere l'ID dell'applicazione come menzionato nel file build.gradle del modulo dell'applicazione, non la proprietà "pacchetto" menzionata nel manifest Android. (Se sono diversi, quali possono essere) –

+0

ottima risposta .. +1. Sono molto curioso di sapere dove hai trovato questo, però. –

2

onTokenRefresh() verrebbe chiamato se il token per l'applicazione è stato aggiornato dal servizio ID istanza. Il motivo principale per cui viene chiamato onTokenRefresh() è consentire di aggiornare il server dell'app con il nuovo token in modo che possa inviare messaggi alla tua app.

Non è necessario verificare manualmente il valore del token. Il token viene utilizzato principalmente dal server delle applicazioni per inviare messaggi alla tua app. Pertanto, quando l'applicazione viene eseguita per la prima volta, devi chiamare InstanceID.getToken() e inviare il token al tuo server. Successivamente, se il token viene aggiornato, richiama di nuovo InstanceID.getToken() e invia nuovamente il nuovo valore al tuo server.

Controlla qui per un example.

+6

"Non dovresti testare" - di sicuro dovresti. – sstn

+1

Anche in disaccordo con "non è necessario testare". Certamente dovresti testare manualmente l'attivazione di onTokenRefresh() poiché questo è il tuo codice personalizzato. Altrimenti, non puoi essere certo che la vera richiesta di aggiornamento del server GCM funzionerà in futuro! – Gavin

+1

Sì, vedo la necessità di testare il codice che si ha in onTokenRefresh, quello che intendevo qui era che non c'è modo di invalidare un token esistente che poi risulterebbe nel callback onTokenRefresh. Ma non c'è nulla che ti impedisca di testare il codice all'interno di onTokenRefresh. –

Problemi correlati