2015-06-04 37 views
28

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.

+1

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

+0

Puoi cancellare l'id R.string e ottenere il valore per nome: http://stackoverflow.com/a/38995785/606351 – Vaiden

risposta

37

Il valore R.string.gcm_defaultSenderId viene generato dal Gradle Google servizi plugin che utilizza un file google-services.json con costanti definite.

Il plugin è applicata nel Gradle:

apply plugin: 'com.google.gms.google-services' 

Per maggiori informazioni Check Implementing GCM Client on Android e vediamo come ottenere il file google-services.json e di set-up Gradle & applicazione in Console per gli sviluppatori.

+2

Questa è la risposta giusta. Il file google-services.json deve trovarsi nella cartella principale dell'app in modo che il plugin Gradle possa generare automaticamente il R.string.gcm_defaultSenderId. Per ottenere il file google-services.json, segui questa guida ufficiale: https://developers.google.com/cloud-messaging/android/client – Sotti

+0

Ho installato quel plug-in ma quel valore stringa non risolve –

+0

è la risposta corretta ... grazie –

12

È l'ID del progetto che dobbiamo compilare al posto di quella stringa. Fare riferimento al seguente link.

https://developers.google.com/instance-id/guides/android-implementation

Generazione token richiede un ID progetto generato da Google Developers Console.

String authorizedEntity = PROJECT_ID; // Project id from Google Developers Console 
String scope = “GCM”; // e.g. communicating using GCM, but you can use any 
         // URL-safe characters up to a maximum of 1000, or 
         // you can also leave it blank. 
String token = InstanceID.getInstance().getToken(authorizedEntity,scope); 
+0

mi hai salvato un sacco di ricerche signore :) – Kushan

+0

Felice di sapere Kushan :) Ma se tu sono su ultimi servizi di Google utilizzare @ risposta di Peter! – Ramesh

+0

Stavo davvero cercando di usare l'API InstanceId e usarlo per eliminare i token. Ecco perché avevo bisogno di authEntity. La risposta di Peter era ciò che stavo usando. Ha gettato un sacco di problemi alla mia faccia a causa dell'uso predefinito delle analisi delle app che il servizio ha e per impostazione predefinita l'API di firebase lo accende. Ogni mio servizio ha avuto un overhead di 60-70 mb a causa di quella sciocchezza – Kushan

Problemi correlati