2015-06-07 18 views
25

Potrebbe qualcuno si prega di aiutarmi a capire ciò che il gcm_defaultSenderId è nel codice seguente (che si trova in onHandleIntent in RegistrationIntentService.java):GCM defaultSenderID

InstanceID instanceID = InstanceID.getInstance(this); 
      String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
      // [END get_token] 
      Log.i(TAG, "GCM Registration Token: " + token); 

Questo è dal campione app di Google per l'attuazione GCM nella vostra app, e non viene nemmeno compilato nella loro app! Sono sicuro che sia qualcosa di specifico per ogni app. Ho già aggiunto l'API GCM alla mia applicazione, ma non so cosa dovrebbe essere questa stringa! Grazie!

+0

Dopo aver acquisito una maggiore comprensione di questo problema, mi sono reso conto che è necessario creare il file di configurazione (google-services.json) e importare quello. Quindi il progetto risolve il mittenteID basato sul plugin menzionato da @Kroikie Per favore fatemi sapere se avete bisogno di ulteriori chiarimenti – Brandon

risposta

9

Citando THIS documento, dove si possono trovare i dettagli su che l'attuazione:

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

Quindi, come si può vedere, il primo parametro si dovrebbe passare alla getToken() è il authorizedEntity, che dovrebbe essere il vostro progetto id da Google Sviluppatori :)

Anche se il progetto in GitHub conteneva quella stringa, non funzionerebbe correttamente, poiché questo authorizedEntity è qualcosa di unico per ogni app.

+0

Sì, sapevo che era unico per ogni app (vedere la mia domanda sopra, tehe), ma grazie! Questa è stata la risposta che ho trovato [qui] (http://stackoverflow.com/questions/11294602/android-gcm-sender-id). Accetterò la tua risposta, grazie per aver pubblicato il codice pertinente e un link! – Brandon

28

gcm_defaultSenderId è una stringa inclusa nel plug-in gradle di google-services. Assicurati di avere:

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

nel file build.gradle.

Questo plug-in dovrebbe essere disponibile nell'ultima versione degli strumenti di creazione.

Come detto da Vesko, questo è il tuo ID mittente che in questo caso è il Numero progetto nel progetto della tua console di sviluppo. Il plug-in per i servizi di Google estrae questo dal tuo file di configurazione del progetto scaricato.

+0

ho applicato il plug-in, ma non funziona ancora perché? –

+0

hai incluso il file di configurazione? se non controlla https://developers.google.com/cloud-messaging/android/start per generarne uno. –

+0

ho incluso il file di configurazione e l'ho inserito nella cartella dell'app che sta lavorando nell'app sample gcm ma non nella mia applicazione –

1

Per risolvere questo problema è sufficiente aggiungere apply plugin: 'com.google.gms.google-services' al modulo gradle.app e classpath 'com.google.gms:google-services:1.3.0' alle dipendenze del progetto gradle.app

e, naturalmente, non dimenticate di aggiungere al vostro compile 'com.google.android.gms:play-services-gcm:8.1.0' Gradle

1

Odio quei buggy plugin Gradle, e cercare di far funzionare il plugin di google-services in un progetto con più gusti non è neanche divertente.

Ho finito per ottenere l'ID del mittente per nome:

InstanceID instanceID = InstanceID.getInstance(this); 
String gcmDefaultSenderId = getString(getResources().getIdentifier("gcm_defaultSenderId", "string", this.getPackageName())); 
String token = instanceID.getToken(gcmDefaultSenderId, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);