J'ai réussi à tester mon code GCM.
Mais exactement le même code, je n'ai pas pu obtenir GCM Push et j'ai:
Erreur GCM: non enregistré.
Réponse GCM Not Registered
signifie après "S'il s'agit de NotRegistered
, vous devez supprimer l'ID d'enregistrement de votre base de données de serveur car l'application a été désinstallée du périphérique ou si aucun récepteur de diffusion n'a été configuré pour recevoir com.google.Android.c2dm.intent. RECEVEZ les intentions. " de documentation . Vérifiez dans quel cas vous obtenez cette erreur, lorsque l'application est désinstallée de l'appareil ou que vous décrivez un récepteur de diffusion incorrect dans AndroidManifest. Vous pouvez tester la fonctionnalité de votre GCM avec mon serveur de test GCM . J'espère que cela vous aide.
Si vous utilisez un périphérique à des fins de test, vous devez supprimer le InstanceID avant d'obtenir le jeton et de le tester à nouveau, car une fois que vous écrasez votre APK, il désenregistre InstanceId et vous obtenez l'erreur NotRegistered. Ainsi, dans votre classe RegisterIntentService, dans la fonction onHandleIntent, procédez comme suit:
InstanceID instanceID = InstanceID.getInstance(this);
try
{
instanceID.deleteInstanceID();
} catch(IOException e)
{
e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
Le Not Registered
se produit lorsque GCM pense que le périphérique n'a pas pu gérer le message. Cela se produit si l'application est désinstallée ou mal configurée pour gérer le message:
Sur la base des réponses @Samik et @ O'Rilla, je suggère les étapes suivantes:
<receiver>
et <sender>
sont définis dans le noeud <application>
dans AndroidManifest.xml
.<category Android:name="COM.COMPANY.YOURAPP" />
correct dans votre <receiver>
Si vous pensez vraiment que votre code est correct et que vous obtenez toujours une erreur
{"error": "NotRegistered"}
essayez de désinstaller manuellement l'application à partir du téléphone et exécutez-la à nouveau (votre appareil recevra un nouvel identifiant d'enregistrement).
Au moins dans mon cas, le problème était résolu!
J'utilisais l'ancien code obsolète pour GCM:
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(this);
}
String regId = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regId;
et en essayant de passer à la nouvelle façon:
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
J'avais la même erreur et ça m'a rendu fou pendant deux jours solides.
Après avoir tout essayé dans le livre, il a été résolu de désactiver GCM dans la console des développeurs, de l'activer à nouveau, puis d'aller ici: https://developers.google.com/mobile/add pour générer un nouveau fichier google-services.json
pour mon Application Android.
Notez également que la RegistrationIntentService
doit être à la racine de votre paquet, sinon cela ne fonctionnera pas! (Voir cet exemple pour l'implémentation de gcm dans Android: https://github.com/google/gcm )
J'espère que cela aide quelqu'un parce que j'ai perdu des jours à ce sujet !!!! > <
J'ai eu cette erreur lorsque le récepteur gcm se trouvait en dehors de l'application dans le fichier manifeste. Déplacé le récepteur dans le champ d'application et tout a fonctionné. Un lapin très heureux maintenant.
<application>
...
<receiver>
...
</receiver>
...
</application>
Un compte Google est obligatoire sur les appareils exécutant Android 4.0.4 ou une version antérieure . http://developer.Android.com/google/gcm/gcm.html
Vous devez également ajouter <uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
dans votre fichier manifeste.
Cela signifie simplement que vous donnez un identifiant d'enregistrement erroné . Pour cela, commencez par exécuter votre application mobile et votre identifiant d'enregistrement viendra sous forme de jeton . Mettez ce jeton dans le code de votre serveur d'application en tant qu'ID d'enregistrement . Pour App ID, indiquez l'ID du serveur, que vous pouvez obtenir de la console de développeur Google, de votre projet et des informations d'identification . Pour l'ID de l'expéditeur, définissez votre ID de projet susceptible de provenir du projet et des paramètres de la console de développeur.