web-dev-qa-db-fra.com

GCM defaultSenderID

Quelqu'un pourrait-il m'aider à comprendre ce que gcm_defaultSenderId se trouve dans le code suivant (présent dans onHandleIntent dans RegistrationIntentService.Java):

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

Cela provient de l'exemple d'application Google pour la mise en œuvre de GCM dans votre application, et cela ne se compile même pas dans leur application! Je suis sûr que c'est quelque chose de spécifique à chaque application. J'ai déjà ajouté l'API GCM à mon application, mais je ne sais pas ce que cette chaîne est supposée être! Merci!

26
Brandon

Citation THIS document, où vous pouvez trouver des détails sur cette implémentation:

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

Comme vous pouvez le constater, le premier paramètre que vous devriez transmettre à getToken() est la authorizedEntity, qui devrait être votre identifiant de projet provenant de Google Developers :)

Même si le projet dans GitHub avait cette chaîne, il ne vous servirait à rien, car cette authorizedEntity est unique en son genre pour chaque application.

8
Vesko

Le gcm_defaultSenderId est une chaîne qui est incluse dans le plugin Gradle de google-services. Assurez-vous d'avoir le:

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

dans votre fichier build.gradle.

Ce plugin devrait être disponible dans la dernière version des outils de compilation.

Comme Vesko l'a dit, il s'agit de votre ID d'expéditeur, qui dans ce cas est le numéro de projet de votre projet de console de développement. Le plugin google-services extrait cela du fichier de configuration de votre projet téléchargé.

28
Arthur Thompson

Je déteste ces plugins Gradle buggés, et essayer de faire en sorte que le plugin google-services fonctionne dans un projet avec plusieurs saveurs n'est pas amusant non plus.

J'ai fini par obtenir l'identifiant de l'expéditeur par son nom:

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

Pour résoudre ce problème, il vous suffit d’ajouter apply plugin: 'com.google.gms.google-services' à votre module gradle.app et classpath 'com.google.gms:google-services:1.3.0' aux dépendances de votre projet gradle.app.

et bien sûr, n'oubliez pas d'ajouter compile 'com.google.Android.gms:play-services-gcm:8.1.0' à votre diplôme 

1
Gabriel Ferreira

Il y a encore une chose importante, créez le fichier google-services.json

Juste au cas où quelqu'un d'autre trébuche sur ce problème.

1
Lisandro