2012-10-18 19 views
7

Próbuję użyć usługi GCM w mojej aplikacji na Androida.Android Google Cloud Messaging (GCM) i identyfikator braku nadawcy

Do tego użyłem android dokumentacji od http://developer.android.com/guide/google/gcm/gcm.html

stworzyłem proces rejestracji po stronie klienta z ETC ID nadawcy i aplikacji po stronie serwera, gdzie używam id rejestracji i identyfikator nadawcy do wysyłania wiadomości.

Gdy instaluję aplikację w moim telefonie za pośrednictwem Eclipse, powiadomienia push działają dobrze, więc identyfikator nadawcy, który mam, jest prawidłowy.

Wtedy, kiedy wyeksportować plik apk z Eclipse i zainstalować ją w moim telefonie, otrzymuję komunikat o błędzie, że Sender jest źle

MissmatchedSenderId 

Ktoś ma pomysł whyI otrzymuję ten.

Czytałem te tematy:

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

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

Ale dziwna rzecz w moim przypadku jest to, że wszystko działa poprawnie przed eksportem aplikację jako apk i wtedy mam ten problem.

Każdy pomysł jest w większości przychylny.

Odpowiedz

10

Rzeczywiście miałem ten sam problem i badałem ponad 10 godzin.

W końcu odkryłem problem! Brak informacji związanych z kluczem API serwera lub kluczem API przeglądarki lub SenderID. Problem stanowiła dokumentacja Google:

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

Google twierdzi, że trzeba wywołać funkcję getRegistrationId i tylko wtedy, gdy id jest pusty rejestr połączeń! Co nie działało dla mnie w ogóle ... kiedy to robiłem, zawsze wracałem MismatchSenderId podczas wysyłania do tego rejestru.

Moje rozwiązanie było: Zawsze zadzwonić

GCMRegistrar.register(this, SENDER_ID); 

i gdy funkcja

protected void onRegistered(Context c, String regId) 

nazywa Zapisz w regId w mojej bazy danych serwera.

jeśli zrobię to w ten sposób, wszystko działa bez zarzutu!

+0

Dziękuję bardzo @schurtertom, to faktycznie działa dla mnie też. –

+0

gdzie znajdę "GCMRegistrar", dodałem Usługi Google Play jako moją bibliotekę we właściwościach mojego projektu. Nadal nie można zaimportować tej klasy. Czy możesz pomóc, jak mogę to przezwyciężyć? –

1

Połączenie klucza SenderID i klucza API udostępnianego przez GCM jest unikalne dla każdej aplikacji.

Napotkaliśmy problem z niezgodnością senderID, gdy zaktualizowaliśmy nasz identyfikator nadawcy po stronie klienta, ale nadal używaliśmy klucza API powiązanego ze starym identyfikatorem nadawcy.

Udało nam się rozwiązać problem po zaktualizowaniu klucza API serwera. Również odpowiedź @schurtertom jest bardzo pomocna

Powiązane problemy