Non riesco a ottenere l'ID di registrazione da Android GCM
-
13-12-2019 - |
Domanda
Sebbene provo un'altra risposta a questo problema, non può essere risolto. L'ID mittente è corretto, le autorizzazioni vengono aggiunte, il tasto API è vero.
Io uso questo post per creare il progetto: 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();
.
restituisce una stringa vuota.
Soluzione
Avete generatoDicetagCode definito correttamente aIl pacchetto root della tua 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>
.
Assicurarsi che GCMIntentService
sia identico al pacchetto principale della tua app o il tuo ID restituirà una stringa vuota.
Si noti anche che
GCMRegistrar.register(this, "...");
.
è asincrono.Pertanto, chiamare "my_app_package"
immediatamente dopo che non è affidabile, quindi dovresti evitarlo.
L'ID arriverà tramite la richiamata Broadcast al GCMRegistrar.getRegistrationId(this)
, come parte della procedura di registrazione.Da lì è quindi possibile memorizzare il tasto GCM / FCM ovunque tu voglia, e usarlo in altre parti dell'applicazione (di solito sul server).
Altri suggerimenti
Se la tua applicazione lancia la prima volta, devi attendere la richiamata onRegistrata sul tuo file GCMINTENTSERVICE.JAVA.
GCMRegistrar.register(this, SENDER_ID);
// Android does NOT wait for registration ends and executes immediately line below
// So your regId will be empty.
regId = GCMRegistrar.getRegistrationId(this);
.
GCMINTENTSERVICE.JAVA:
@Override
protected void onRegistered(Context c, String regId) {
// You can get it here!
}
.
Modifica : versione più recente della libreria GCM (che Bundled con Google Play Services Library) attende la risposta e restituisce l'ID di registrazione.Quindi questa risposta è per le vecchie librerie GCM.
Ho lo stesso problema dopo una lotta 1 giorno trovo la soluzione.Per prima cosa metto il mio codice correlato GCM nel mio pacchetto principale e fai il cambiamento secondo il mio pacco in AndroidManifest.xml
Ti do semplice esempio.Il mio nome del progetto è GCMexample e ho tre pacchetti 1. com.examle.gcmesempio (pacchetto principale), 2. com.examle.gcmexample.attività (secondo pacchetto), 3. com.example.gcmexample.adapter (terzo pacchetto) .
Non ottengo l'ID di registrazione quando il mio file di classe correlato GCM nel mio secondo pacchetto
La mia classe correlata GCM come 1. GCMINTENTSERVICE, 2. PARTECITÀ, 3. Comunità 4. Wakelocker messo nel mio pacchetto principale com.example.gcmesample
anche il mio androidmanifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<permission android:name="com.example.GCMExample.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="com.example.GCMExample.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<receiver
android:name="com.google.android.gcm.GCMBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<!-- Receives the actual messages. -->
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<!-- Receives the registration id. -->
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.example.GCMExample" />
</intent-filter>
</receiver>
<service android:name="com.example.GCMExample.GCMIntentService" />
. Registrazione dell'app Com.example.ilkgcm dei mittenti "My_Sender_id" - Questo errore suggerisce che non hai cambiato il tuo 'my_Sender_id' su un ID mittente valido che sarebbe un codice di 12 lettere.
Se non si ottiene la risposta dalla registrazione. Uno del motivo principale è il tuo file manifest non è configurato correttamente ... soprattutto dare il "pacchetto_name" (il tuo nome del pacchetto di app come com.xxx.yyy) in ecorrettamente.
Ad esempio il nome della classe del ricevitore è: "mycustomintsentservice.java", basta cambiare questo nome come "gcmintintservice.java", quindi provalo di nuovo.Questa è una soluzione semplice.Basta cambiare il tuo nome del file sull'area SRC.