Ich kann keine Registrierungs-ID von Android GCM erhalten
-
13-12-2019 - |
Frage
Obwohl ich eine andere Antwort auf dieses Problem versuche, kann es nicht gelöst werden.Die Absender-ID ist korrekt, Berechtigungen wurden hinzugefügt, API-Schlüssel ist wahr.
Ich verwende diesen Beitrag zum Erstellen des Projekts:http://developer.android.com/guide/google/gcm/gs.html#server-app
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, SENDER_ID);
regId = GCMRegistrar.getRegistrationId(this);
} else {
Log.v(TAG, "Already registered");
}
String did = getDeviceID();
es gibt eine leere Zeichenfolge zurück.
Lösung
Haben Sie GCMIntentService
definiert korrekt im Root-Paket Ihrer App?
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="my_app_package" />
</intent-filter>
</receiver>
Stelle sicher das "my_app_package"
ist mit dem Hauptpaket Ihrer App identisch, andernfalls gibt Ihre ID eine leere Zeichenfolge zurück.
Beachten Sie das auch
GCMRegistrar.register(this, "...");
ist asynchron.Daher Aufruf GCMRegistrar.getRegistrationId(this)
unmittelbar danach ist nicht zuverlässig, daher sollten Sie es vermeiden.
Die ID wird per Broadcast-Rückruf an Sie gesendet GCMIntentService
, im Rahmen des Registrierungsverfahrens.Von dort aus können Sie den GCM/FCM-Schlüssel dann an einem beliebigen Ort speichern und in anderen Teilen der Anwendung (normalerweise auf dem Server) verwenden.
Andere Tipps
Wenn Ihre Anwendung das erste Mal einlädt, müssen Sie auf der Datei von gcmintentservice.java warten.
generasacodicetagpre.gcmintentservice.java:
generasacodicetagpre.bearbeiten : neuere Version der GCM-Bibliothek (der mit Google Play Services-Bibliothek gebündelt ist) wartet auf Antwort und gibt die Registrierungs-ID zurück.Diese Antwort ist also für ältere GCM-Bibliotheken.
Ich habe das gleiche Problem nach dem 1-tägigen Kampf, ich finde Lösung.Zuerst lege ich meinen GCM-Code in mein Hauptpaket und ändere mich nach meinem Paket in androidmanifest.xml
Ich gebe dir ein einfaches Beispiel.Mein Projektname ist gcmexample und ich habe drei Paket 1. com.examle.gcmexample (Hauptpaket), 2. com.examle.gcmexample.Activity (zweites Paket), 3. com.example.gcmexample.adapter (dritte Paket)
Ich bekomme keine Registrierungs-ID, wenn meine GCM-Klassendatei in mein zweites Paket zusammenhängt
My GCM-Zugehörige Klasse wie 1. GCMINTIMENSERVICE, 2. Serververgnügen, 3. Gewohnheiten 4. Wakelocker in mein Hauptpaket versetzen com.example.gcmexample
auch mein androidmanifest.xml
generasacodicetagpre.registrieren app com.example.ilkgcm von Sendern "my_sender_id" - Dieser Fehler deuten darauf hin, dass Sie Ihre 'my_sender_id' nicht auf eine gültige Absender-ID geändert haben, die ein 12-Buchstabe-Code wäre.
Wenn Sie nicht von der Registrierung antworten. Einer der Hauptgrund ist Ihre Manifestdatei nicht richtig konfiguriert ... vor allem dem "paket_name" (Ihr App-Paketname wie com.xxx.yy) in der undrichtig.
Zum Beispiel ist der Name Ihrer Empfängerklasse: "mycustomintentsservice.java", ändern Sie diesen Namen einfach als "gcmintentsservice.java", dann versuchen Sie es erneut.Dies ist eine einfache Lösung.Ändern Sie einfach Ihren Dateinamen im SRC-Bereich.