Aller au contenu

[DEV PUSH En Perl]


Recommended Posts

Tout nouveau :) Merci de réorienter le sujet, s'il n'a pas sa place ici.

Voila, ça fait quelques temps que j'essaye de programme l'envoi de notification PUSH vers les serveurs de Google et ce en Perl.

Je ne comprends pas le problème que je rencontre :(.

Le code est pourtant simple, mais quoi qu'il se passe, le service me renvoie une erreur 401, sans autre forme de procès :(.

Est ce que quelqu'un ayant déjà utilisé c2dm et éventuellement les libs perl pourrait m'expliquer ou est ce que j'ai un problème.

D'avance merci.

my %clientlogin = (
       accountType     => "HOSTED_OR_GOOGLE",
       Email           => $uemail,
       Passwd          => $upass,
       service         => "ac2dm",
);

my $ua = LWP::UserAgent->new;
my $req = POST($urllogin,
               Content_Type => 'application/x-www-form-urlencoded',
               Content => \%clientlogin
       );

my $res = $ua->request($req);

# debug
if ($res->is_success)
{
       print "ClientLogin : OK\n"
}
else
{
       print "ClientLogin Content : " . $res->content . "\n";
}

# suite normale
if ($res->content =~ /Auth=(.*)/)
{
       print "Auth = $1\n";
       my $authtoken = $1;


       ## Seconde partie :
       ## On tape la requete sur l'url send du c2dm pour aller chercher les infos

       my $urlsend = "http://android.apis.google.com/c2dm/send";
       #my $urlsend = "https://android.clients.google.com/c2dm/send";

       my $regid = "APA91bG8VEmTdTWU1fnuDYPa4iWC8_7xYamOBriXZPQg8hqq4mC8uz45Dxagl9apstgUdxKFzqgQfhpSGJQME_hdm9ZBS9lOoiuKzoTcpT9Xy5gnZ_L6t8E";

         my %transformfields = (
               "registration_id"       => $regid,
               "collapse_key"          => 1, #chaine arbitraire de groupement de message a utiliser pour envoi multiples
               "data.type"             => "NouveauClub",
               "data.val1"             => "Nouveaux",
               "data.val2"             => "totonononana",
               );

       my $ua2 = LWP::UserAgent->new;
       $ua2->agent("PUSH/0.01a");
       my @headers = ("Authorization" => "GoogleLogin Auth=$authtoken");
       my $req2 = POST($urlsend,
               Content_Type => 'application/x-www-form-urlencoded',
               @headers,
               Content => \%transformfields,
               );

        my $res2 = $ua2->request($req2);


       print "RegID   : " . $regid . "\n";
       #print "Success : " . $res2->is_success . "\n";
       #print "Content : " . $res2->content . "\n";

       #print Dumper($req2);
       print Dumper($res2);




J'ai obtenu le RegID à partir de l'application en test.

Doit elle être signée ou déposé sur les dépôts google pour que les notifications fonctionnent ?

Lien vers le commentaire
Partager sur d’autres sites

Oui, mais le ClientLogin me renvoie bien un OK.

Est ce que seul l'auth token sert à l'authentification, ou est ce qu'il va utiliser aussi le registration ID.

Auquel cas, comment savoir ce qui ne va pas :(.

J'ai essayé de lancer une commande curl avec les paramètres et même problème. J'en perds mon latin.

Lien vers le commentaire
Partager sur d’autres sites

Beh c'est le résultat qu'annonce la requête de réponse de Google... mais pourtant il est bien la, quand je dump la variable, je le vois bien dans l'aller et le retour.

Euh, par contre, je viens de voir qu'il fallait s'inscrire au service c2dm :(, je pensais que ça se faisait tout seul une fois qu'on avait un compte développeur en fait, j'adore comme tout est clair avec Google :(.

Je tente et je repasse ;).

Merci encore pour la réactivité.

Lien vers le commentaire
Partager sur d’autres sites

Bon beh ça n'y change rien, il doit toujours y avoir un problème :(.

Je capte pas la façon d'insérer l'en tête, il me parait bon puisque le dump l'indique bien, mais il semble qu'il ne fasse pas la joie de Google :(.

Si vous avez 2 ou 3 tuyaux... faites signe :)

Lien vers le commentaire
Partager sur d’autres sites

Je suis d'accord avec moritan sur l'erreur

401 Indicates that the ClientLogin AUTH_TOKEN used to validate the sender is invalid.

Je ne suis pas un spécialiste en perl, mais dans ton code, j'ai l'impression que tu ne remets pas ton cookie obtenu au début, qui doit contenir ton AUTH_TOKEN

J'espère que ça t'aidera :)

Lien vers le commentaire
Partager sur d’autres sites

Je vais me la taper contre les murs !!!

En fait le problème semble venir du auth que j'écrivais Auth :(...

M'nant j'ai un "not registered".

Comme si mon registration_id n'était pas bon, alors que je l'obtiens via l'application et que je l'enregistre en base de données directement.

L'application qui a été développée par une société me l'envoie bien, mieux, je peux stoper la notification et la réactiver, j'en obtiens un nouveau code qui lui non plus ne passe pas :(.

J'ai contacté la société pour voir ce qu'ils en pensent. Je vais modifier un peu le prog pour qu'il utilise la base et tente tous les registration_id que j'ai pu obtenir.

Si vous voyez quelques chose d'autre ?

Y a t il moyen de tester le registration_id d'une façon ou d'une autre pour savoir si c'est lui qui pose problème ?

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...