web-dev-qa-db-fra.com

GCM 'Erreur: non enregistré'

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é.

39
LKM

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.

51
Samik

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

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:

 enter image description here

Sur la base des réponses @Samik et @ O'Rilla, je suggère les étapes suivantes:

  1. Désinstallez l'installation actuelle du périphérique Android
  2. Assurez-vous que <receiver> et <sender> sont définis dans le noeud <application> dans AndroidManifest.xml.
  3. Assurez-vous que vous avez le <category Android:name="COM.COMPANY.YOURAPP" /> correct dans votre <receiver>
  4. Assurez-vous que l'implémentation de Receiver est correcte
9
Roozbeh Zabihollahi

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!

5
naren

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 !!!! > <

2
Micro

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>
2
G O'Rilla

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.

1
ztan

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. 

0
ireshika piyumalie