2011-10-03 1 views
8

J'ai vu beaucoup de questions similaires mais aucune bonne réponse malgré le fait que certaines d'entre elles aient été acceptées. Je me suis inscrit pour C2DM. J'ai reçu un email de confirmation. Ensuite, j'ai écrit une application simple pour vous inscrire à C2DM. Je reçois l'identifiant (essayé sur l'émulateur et sur le vrai périphérique). Puis j'ai obtenu le jeton auth (avec curl) pour mon email que j'ai utilisé pour l'enregistrement de C2DM (le même email que j'utilise dans l'application pour acquérir l'identifiant).
Quand j'essaie de faire le push (aussi avec curl), j'obtiens une erreur 401 (comme le jeton d'authentification est faux). Je lis beaucoup de tutoriels et je manque d'idées.c2dm Erreur 401 lors de l'envoi de messages après avoir reçu un identifiant et un jeton d'authentification

+0

Chose étrange, quand j'ai essayé d'obtenir un jeton d'authentification pour mon email qui n'a JAMAIS été enregistré pour c2dm, j'ai aussi un jeton d'authentification. Donc, je pense que mon jeton d'authentification utilisé pour envoyer des messages doit être faux. – DixieFlatline

+0

J'ai aussi le même problème. L'application Android s'enregistre avec C2DM puis envoie un jeton d'utilisateur au serveur Web, mon serveur Web obtient un jeton d'authentification de C2DM puis envoie une notification push à l'application enregistrée et tout ce que j'obtiens est une erreur 401. Peut-être qu'il y a un problème avec le service C2DM. Peut-être pas très fiable? – jamesc

Répondre

1

Permettez-moi de l'essayer (avec boucle seulement):

Au début, nous sollicitons le jeton auth:

curl.exe -v -k https://www.google.com/accounts/ClientLogin -d [email protected] -d Passwd=secret -d accountType=GOOGLE -d source=your.registered.domain -d service=ac2dm

En conséquence votre recevez le jeton auth:

< HTTP/1.1 200 OK
SID=XXX
LSID=XXX
Auth=XXX
* Connection #0 to host www.google.com left intact
* Closing connection #0
* SSLv3, TLS alert, Client hello (1):

Veuillez noter que la réponse Auth est dans le résultat avec une première lettre majuscule: "Auth = XX X"!

Maintenant, nous utilisons le résultat de la requête suivante, mais avec la première lettre minuscule:
curl.exe -v -k --header "Authorization: GoogleLogin auth=XXX" https://android.apis.google.com/c2dm/send -d "registration_id=XXX" -d "data=helloooo" -d collapse_key=Z

Et cela fonctionne! Mais vous obtenez une erreur 401, si vous utilisez l'auth comme dans la première réponse (A majuscule dans « Auth »):

curl.exe" -v -k --header "Authorization: GoogleLogin Auth=XXX" https://android.apis.google.com/c2dm/send -d "registration_id=XXX" -d "data=helloooo" -d collapse_key=Z

Ainsi, le « auth » de la demande 2 est sensible à la casse. Je pense que c'est un piège dans lequel 50% des utilisateurs interviennent. J'espère que cela pourra aider.

Questions connexes