Sto cercando di far funzionare la mia app con Google Cloud Messaging. Sto seguendo l'app di avvio rapido di Google Cloud Messaging che può essere trovata qui su github.Che cos'è authorizedEntity? Impossibile trovare gcm_defaultSenderId nella propria app
Nella loro app di avvio rapido a un certo punto chiediamo al servizio Google Cloud Messaging un token di registrazione in modo che questa istanza della nostra app possa comunicare con il cloud.
Trovo questa riga di codice:
RegistrationIntentService.java::onHandleIntent(Intent intent):
InstanceID instanceID = InstanceID.getInstance(this);
String gcmRegistrationToken = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
La parte che confonde me è questo valore: R.string.gcm_defaultSenderId
Esso è definito nella loro quickstart app, ma viene generato automaticamente.
Come dovrei ottenere la mia app per generare quel valore?
Guardo la documentazione per InstanceID.getToken che è heregetToken(java.lang.String, java.lang.String)
InstanceID.getoken
restituisce un token che autorizza un soggetto (ad esempio: servizio di cloud) per eseguire un'azione su conto dell'applicazione identificato da ID istanza. Questo è simile a un token OAuth2
tranne che si applica all'istanza dell'applicazione anziché a un utente.
L'intestazione funzione è simile:
public String getToken (String authorizedEntity, String scope)
vedo che il primo arg che getToken
vuole è String authorizedEntity
. quindi, cosa si suppone essere questa StringEntity autorizzata?
Identifica chiaramente l'istanza dell'app che effettua la richiesta, ma come dovrei generarla? Nell'applicazione QuickStart, non riesco a trovare è definito in res/value/strings.xml
, posso trovare solo definito in R.java e app/build/generated/res/google-services/debug/values/values.xml
Assomiglia:
<resources>
<string name="gcm_defaultSenderId">175643285</string>
</resources>
C'è solo che una stringa in quella file, e quel file è sepolto nel profondo della struttura del progetto. Non riesco a trovare da nessuna parte nel codice in cui questo gcm_defaultSenderId
viene generato a livello di codice.
Sono confuso perché, come avrei dovuto sapere che c'era una stringa? Non ho mai definito quella stringa e googling per "non può risolvere gcm_DefaultSenderId
" non dà risultati. Sto cercando di implementare Google Cloud Messaging nella mia app, quindi ovviamente la mia app non saprà automaticamente di generare quella stringa. Come dovrei fare quel numero di identificazione?
Questo è il motivo per cui penso sia importante capire cosa vuole questa stringa authorizedEntity che InstanceID.getToken vuole, in modo che possa generarne uno da dare a getToken. Forse la mia idea è completamente sbagliata, forse non dovrei generare gcm_defaultSenderId, ma so che non dovrei alterare R.java, e il file values.xml
si trova anch'esso in una cartella "generata".
Aiuto per favore? Se trovo la risposta nelle mie ricerche, inserirò felicemente la risposta.Qualsiasi aiuto molto apprezzato, nota: il mio progetto è stato esportato in Gradle da Eclipse, quindi avrà ancora la struttura del progetto/cartella Eclipse, che non dovrebbe causare alcun problema, ma il file values.xml
si trova in una posizione diversa.
L'ID del mittente proviene dalla console degli sviluppatori, ma se hai seguito il quickstart, è stato generato per te nel file google-services.json che hai copiato nella directory del progetto. – Koh
Puoi cancellare l'id R.string e ottenere il valore per nome: http://stackoverflow.com/a/38995785/606351 – Vaiden