Erreur GCM Android. Le serveur renvoie Non enregistré lorsque le client est enregistré
J'ai suivi la démonstration donnée à http://developer.android.com/google/gcm/gs.html et a reçu une demande d'essai, GCMTrial pour fonctionner correctement.
Mais, j'ai essayé de suivre les mêmes étapes sur une application existante, mais il didnot travail. J'ai donc fait un tout nouveau projet. Mais même alors , en suivant les mêmes étapes exactes, je ne pourrais pas obtenir de GCM pour envoyer un message avec succès. J'ai donc essayé de changer GCMTrial pour le nom, et pas trop ne fonctionne pas.
- Je m'inscrire pour la GCM, via l'activité principale et obtenir les journaux suivants :
12-19 21:30:13.102: V/GCMRegistrar(15889): Registering receiver
12-19 21:30:13.112: D/GCMBaseIntentService(15889): handleRegistration: registrationId = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, error = null, unregistered = null
12-19 21:30:13.112: D/GCMRegistrar(15889): resetting backoff for com.XXX.XXX
12-19 21:30:13.117: V/GCMRegistrar(15889): Saving regId on app version 1
Mais lorsque j'essaie d'envoyer un GCM message, il renvoie l'erreur suivante
[ errorCode=NotRegistered ]
Code Client :
public class MainActivity extends Activity {
TextView tve;
String TAG = "GCMTrial";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, "XXXXXX");
Log.v(TAG, "Reg");
} else {
Log.v(TAG, "Already registered");
}
}
GCMIntentService :
public class GCMIntentService extends GCMBaseIntentService {
@Override
protected void onError(Context arg0, String arg1) {
//TODO Auto-generated method stub
}
@Override
protected void onMessage(Context arg0, Intent arg1) {
//TODO Auto-generated method stub
Log.d("GCM", "RECIEVED A MESSAGE");
//Get the data from intent and send to notificaion bar
}
@Override
protected void onRegistered(Context arg0, String arg1) {
//TODO Auto-generated method stub
}
@Override
protected void onUnregistered(Context arg0, String arg1) {
//TODO Auto-generated method stub
}
}
Manifeste :
Code Serveur :
System.out.println("Sending GCM");
String key = "XXX"; //Server API key taken from the site
clientID = "XXXXXXXXX"; //copied from the logs
Sender sender = new Sender(key);
Message message = new Message.Builder().build();
Result result = sender.send(message, clientID, 1);
System.out.println(result.toString());
Il me rend fou.. Il montre que celle enregistrée dans le téléphone android, même appelle la onRegistered méthode de la GCMIntentService classe.. mais lorsque j'essaie d'envoyer un message, il signale un "NotRegistered Erreur" ...
Je ne sais pas ce que im faire de mal.. merci de m'aider les gars....
source d'informationauteur user1657709
Vous devez vous connecter pour publier un commentaire.
Bien, sais que c'est un bogue lors de l'installation avec la bad.
GCMRegistrar ne sait pas que l'appareil n'est pas enregistré sur la GCM, de serveur et de ne pas s'inscrire.
Ce que vous pouvez faire est de s'inscrire de toute façon :
Ou de la désinstallation de l'application sur le client puis d'exécuter une nouvelle installation à partir de la Bad.
Gardez à l'esprit il y a peu de chances qu'il se passe dans la production.
vous avez oublié d'ajouter le constructeur de votre
GCMIntentService
ajouter les éléments suivants à votre
GCMIntentService
SENDER_ID est le XXXXXXX qui utilisé pour enregistrer votre application.
Vous pouvez essayer de remplacer le contexte de "ce" de "getcontexteapplication()" pour utiliser le contexte de l'application. Voici mon exemple de code: