Google Cloud Messaging registrieren AUTHENTICATION_FAILED
Ich will versuchen, das Google Cloud Messaging (GCM) Dienst, und ich bin konfrontiert mit einem problem am Anfang.
Bekomme ich eine Fehlermeldung AUTHENTICATION_FAILED
beim Versuch, ein Gerät registrieren, um GCM.
Ich suchte und was ich fand, waren Variationen des falsche Passwort. Mein Passwort ist korrekt und ich bin mit nur einem account.
Gibt es zwei Möglichkeiten zum implementieren GCM client auf Android:
- GCM-Bibliothek mit zusätzlichen jar, jetzt veraltet.
- Google Play Services API
Begann ich mit dem zweiten natürlich und habe dieses Problem.
Dachte ich, das problem ist in meinem Handy, aber dann beschlossen, zu versuchen ist der erste Weg, was auch geklappt hat!
Jedoch ist es veraltet und erfordert ein zusätzliches Gefäß, das scheint nicht der richtige Weg.
In einem Versuch zu verstehen, die Gründe für die Fehler, ich dekompiliert Google-Play-Services-Glas und Vergleich es mit GCM-Bibliothek.
Es stellt sich heraus, dass Sie beide haben eine ähnliche Methode, so etwas wie:
void register(Context context, String senderIds) {
Intent intent = new Intent("com.google.android.c2dm.intent.REGISTER");
intent.setPackage("com.google.android.gms"); //this one row are different
setPackageNameExtra(context, intent);
intent.putExtra("sender", senderIds);
context.startService(intent);
}
Den Unterschied in einer Zeile:
In GCM-Bibliothek ist es com.google.android.gsf
, wo gsf
ist Google-Services-Framework (denke ich mal), und es funktioniert!
Im Google-Play-Services-API jar es ist com.google.android.gms
, Und es funktioniert nicht (AUTHENTICATION_FAILED Fehler).
Dann in GCM-Bibliothek, die ich ersetzt "gsf" zu "gms" und ausführen. Und ich habe die gleiche AUTHENTICATION_FAILED Fehler! Wenn ich geben Sie ein anderes Paket, dann ist es nicht funktioniert.
Was muss ich tun damit es funktioniert? Sollte ich etwas in das Telefon? Oder ist es ein bug im Google-Play-Dienste? Haben jemand begegnet der so ein problem?
Vielen Dank im Voraus!
InformationsquelleAutor user2862139 | 2013-10-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in das gleiche problem, und es scheint nicht, wie google ist in keiner Eile, um es zu beheben.
Wollte ich nicht hinzufügen, die veraltete client-Helfer gcm.jar meine app, so dass ich codiert eine minimal-Lösung, die funktioniert auf meinem Android 2.3.6 Nexus One-Telefon nicht, dass die Registrierung, wie in der Frage oben
Den AUTHENTICATION_FAILED löst IOException aus, die in den obigen code
Habe ich den oben genannten code, um meine app. Sie sind vereinfachte Methoden vom Client Helper-gcm.jar (so brauchen Sie nicht, fügen Sie die jar-app)
Dieser code ist in der intent-service, und hat ein paar Zeilen zu speichern, die ID erhalten Sie von GCM. Wie Sie sehen können, nur etwa 20 Zeilen extra-code im Vergleich zu einer basic-Umsetzung, und keine zusätzlichen Abhängigkeiten! Sie brauchen nur zu aktualisieren Sie Ihre AndroidManifest.xml um sicherzustellen, dass Sie erhalten die REGISTRIERUNG Absicht.
Ich hoffe das hilft, bis google bekommt Ihre Tat zusammen!
InformationsquelleAutor spirographer
Dieser scheint wie ein bug. Hier ist, was ein Android-Entwickler sagt darüber in der android-gcm-Google-Gruppe:
Offenbar ein factory reset das problem lösen kann, aber Sie sind immer noch die Untersuchung.
InformationsquelleAutor Eran
So wie es aussieht ist die Lösung um dieses problem zu vermeiden ist, zu fallen, wieder auf die alte veraltet GCM-client-Bibliothek bei der AUTHENTICATION_FAILED Fehler tritt auf FROYO und GINGERBREAD.
Ist hier ein einfaches code-snippet, wie ich aktualisiert, die neue Gcm-client fallback auf den alten client:
Finden Sie die alte veraltet GCM-Client helpher hier: http://developer.android.com/google/gcm/helper.html
Finden Sie den code der GCM-client auf Ihrem computer auf dem Weg:
ANDROID_SDK_ROOT/extras/google/gcm-client (da du runtergeladen hast, diese extra mit dem Android SDK Manager).
Ich die alte gcm-client in einem neuen Paket namens com.google.android.gcm.veraltet, zu versuchen, sich daran zu erinnern, mich nicht für andere Sachen.
InformationsquelleAutor Giorgio