Mein GCM-Code kann erfolgreich getestet werden.
Aber genau der gleiche Code, ich konnte GCM Push nicht bekommen und bekam:
GCM-Fehler: Nicht registriert.
GCM-Antwort Not Registered
bedeutet "Wenn es sich um NotRegistered
handelt, sollten Sie die Registrierungs-ID aus der Serverdatenbank entfernen, da die Anwendung vom Gerät deinstalliert wurde oder kein Broadcast-Empfänger für den Empfang von com.google.Android.c2dm.intent konfiguriert ist. RECEIVE Absichten. " aus Dokumentation . Prüfen Sie, in welchem Fall Sie diesen Fehler erhalten, wenn die App vom Gerät deinstalliert wird oder Sie einen falschen Broadcast-Empfänger in AndroidManifest beschreiben. Sie können Ihre GCM-Funktionalität mit my test GCM server testen. Hoffe, das hilft dir.
Wenn Sie ein Gerät zum Testen verwenden, müssen Sie die InstanceID löschen, bevor Sie das Token abrufen und erneut testen, da Sie Ihre InstanceId abmeldet, sobald Sie Ihr APK überschrieben haben. Führen Sie in Ihrer RegisterIntentService-Klasse in der Funktion onHandleIntent Folgendes aus:
InstanceID instanceID = InstanceID.getInstance(this);
try
{
instanceID.deleteInstanceID();
} catch(IOException e)
{
e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
Der Not Registered
geschieht, wenn GCM der Meinung ist, dass das Gerät die Nachricht nicht verarbeiten kann. Dies geschieht, wenn die App für die Verarbeitung der Nachricht deinstalliert oder falsch konfiguriert wurde:
Basierend auf den Antworten von @Samik und @ O'Rilla würde ich folgende Schritte vorschlagen:
<receiver>
und <sender>
im <application>
-Knoten in AndroidManifest.xml
definiert haben.<category Android:name="COM.COMPANY.YOURAPP" />
in Ihrem <receiver>
haben.Wenn Sie wirklich glauben, dass Ihr Code korrekt ist und immer noch ein Fehler auftritt
{"error": "NotRegistered"}
deinstallieren Sie die App manuell vom Telefon und führen Sie sie erneut aus (Ihr Gerät erhält eine neue Registrierungs-ID).
Zumindest in meinem Fall wurde das Problem gelöst!
Ich habe den alten veralteten Code für GCM verwendet:
if (gcm == null) {
gcm = GoogleCloudMessaging.getInstance(this);
}
String regId = gcm.register(SENDER_ID);
msg = "Device registered, registration ID=" + regId;
und wenn Sie versuchen, auf den neuen Weg zu wechseln:
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
Ich bekam den gleichen Fehler und es hat mich zwei Tage lang verrückt gemacht.
Nachdem Sie alles in dem Buch getestet haben, was behoben wurde, wurde GCM in der Entwicklerkonsole deaktiviert, erneut aktiviert und dann hier: https://developers.google.com/mobile/add eine neue google-services.json
-Datei für meine erstellt Android App.
Beachten Sie auch, dass RegistrationIntentService
im Stammverzeichnis Ihres Pakets sein muss, sonst funktioniert es nicht! (Dieses Beispiel zeigt die Implementierung von gcm in Android: https://github.com/google/gcm )
Hoffe das hilft jemandem, weil ich hier Tage verloren habe !!!! > <
Ich hatte diesen Fehler, als ich den gcm-Empfänger außerhalb der Anwendung in der Manifestdatei hatte. Der Empfänger wurde in den Anwendungsbereich verschoben und alles hat funktioniert. Ein sehr glücklicher Hase.
<application>
...
<receiver>
...
</receiver>
...
</application>
Ein Google-Konto ist eine Voraussetzung für Geräte, auf denen Android 4.0.4 oder niedriger ausgeführt wird . http://developer.Android.com/google/gcm/gcm.html
Sie sollten auch <uses-permission Android:name="Android.permission.GET_ACCOUNTS" />
in Ihre Manifestdatei einfügen.
Dies bedeutet, dass Sie einfach eine falsche Registrierungs-ID ..__ angeben. Führen Sie dazu zuerst Ihre mobile Anwendung aus, und Ihre Registrierungs-ID wird als Token ..__ angezeigt. Fügen Sie dieses Token als Registrierungs-ID ..__ Ihrem App-Server-Code hinzu. Geben Sie für die App-ID die Server-ID ein, die Sie von der Google-Entwicklerkonsole erhalten, Ihr Projekt und die Anmeldeinformationen . Legen Sie für die Absender-ID Ihre Projekt-ID fest, die vom Projekt übernommen werden kann, Einstellungen in der Entwicklerkonsole.