2012-10-18 35 views
7

Sto cercando di utilizzare il servizio GCM nella mia app Android.Android di Google Cloud Messaging (GCM) e missmatched mittente id

Per questo, ho usato la documentazione Android di http://developer.android.com/guide/google/gcm/gcm.html

ho creato il processo di registrazione lato client con l'etc mittente id e l'applicazione lato server in cui sto utilizzando l'ID di registrazione e il mittente id per inviare messaggi.

Quando sto installando l'app nel mio telefono tramite Eclipse, le notifiche push funzionano bene, quindi l'id del mittente che ho è giusto.

Poi, quando esporto il file apk con Eclipse e installarlo nel mio telefono, sto ottenendo il messaggio di errore che il SenderId è sbagliato

MissmatchedSenderId 

Qualcuno ha un'idea whyI sto ottenendo questo.

Ho letto questi argomenti:

Why do I get "MismatchSenderId" from GCM server side?

When sending messages using GCM, I keep getting the response 'MismatchSenderId'

Ma la cosa strana nel mio caso è che tutto funziona bene prima di esportare l'applicazione come apk e poi ho questo problema.

Qualsiasi idea è per lo più benvenuto.

risposta

10

In realtà avevo lo stesso problema e stavo effettuando ricerche per più di 10 ore.

ho finalmente trovato il problema! Niente relativo alla chiave API server o Chiave API browser o ID mittente. Il problema era la documentazione di Google:

final String regId = GCMRegistrar.getRegistrationId(this); 
if (regId.equals("")) { 
    GCMRegistrar.register(this, SENDER_ID); 
} else { 
    Log.v(TAG, "Already registered"); 
} 

Google dice che si deve chiamare la funzione getRegistrationId e solo se l'ID è il registro delle chiamate vuoto! che non ha funzionato per me a tutti ... quando l'ho fatto ho sempre tornato MismatchSenderId durante l'invio a questo RegID.

La mia soluzione era: chiamare sempre

GCMRegistrar.register(this, SENDER_ID); 

e quando la funzione

protected void onRegistered(Context c, String regId) 

si chiama Save the RegID nel mio database del server.

se lo faccio in questo modo, tutto funziona bene!

+0

Grazie mille @schurtertom, questo funziona davvero anche per me. –

+0

dove trovo "GCMRegistrar", ho aggiunto Google Play Services come libreria nelle proprietà del mio progetto. Non è ancora possibile importare questa classe. Puoi per favore aiutare come posso superare questo? –

1

La combinazione di SenderID e chiave API fornita da GCM è univoca per applicazione.

Abbiamo affrontato il problema di disallineamento del mittente, quando abbiamo aggiornato il nostro senderID sul lato client, ma abbiamo comunque utilizzato la chiave API relativa al vecchio senderID.

Siamo riusciti a risolvere il problema dopo aver aggiornato la chiave API del server. Anche la risposta di @schurtertom è molto utile

Problemi correlati