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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top