2012-07-03 17 views
59

Próbuję utworzyć usługę Push dla mojego Android app i śledzę dokumentację i przykład Google GCM dla tej sprawy:Dlaczego otrzymuję komunikat "MismatchSenderId" od strony serwera GCM?

mogę zarejestrować/wyrejestrować moją aplikację na Androida. Z mojej stronie serwera, widzę, że mam jeden abonament zarejestrowany, ale gdy próbuję wysłać wiadomość z serwera do mojego Android app zawsze uzyskać następujący błąd:

Error sending message to device #0: MismatchSenderId

Dla mojego Android app używam SENDER_ID = 200000000001.

a dla mojej stronie serwera jak mówi Google używam API_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs

Śledziłem ten dokument:

http://developer.android.com/guide/google/gcm/demo.html

Włączyłem także GCM w moim panelu Google API, ale dostanę irytujący komunikat o błędzie.

Jak mogę rozwiązać ten problem?

+0

Sprawdź w pliku manifest.json na identyfikator nadawcy GCM – Shivappa

Odpowiedz

60

Czy twój serwer użył nowego identyfikatora rejestracji zwróconego przez serwer GCM do swojej aplikacji? Miałem ten problem, jeśli próbowałem wysłać wiadomość do identyfikatorów rejestracyjnych wydanych przez stary serwer C2DM.

A także dwukrotnie sprawdź identyfikator nadawcy i API_KEY, muszą one być zgodne, inaczej otrzymasz błąd MismatchSenderId. W konsoli API Google, spójrz na URL projektu:

https://code.google.com/apis/console/#project:xxxxxxxxxxx 

xxxxxxxxx jest identyfikator projektu, który jest identyfikator nadawcy.

I upewnij się, że API Key należący do „Klucz do aplikacji serwerowych (z blokadą IP)”

+0

mam ogromne wątpliwości tutaj. Czy mogę wdrożyć moją aplikację do ładowania innych telefonów z tylko jednym SERIALID? –

+3

Czy obejrzałeś przegląd architektoniczny GCM http://developer.android.com/guide/google/gcm/gcm.html? Każdy telefon z Androidem, który korzysta z Twojej aplikacji, zarejestruje się w GCM za pomocą identyfikatora nadawcy Twojej aplikacji, a otrzyma unikalny identyfikator rejestracji GCM, który musisz przechowywać na swoim serwerze. Jeśli chcesz wysłać wiadomość do wszystkich użytkowników, musisz przejść przez wszystkie te identyfikatory rejestracji. – azgolfer

+6

To jest naprawdę głupie, ale działa. Identyfikator projektu wymieniony na stronie na pulpicie nawigacyjnym jest nazwanym identyfikatorem, który muszę wybrać, jednak musisz użyć identyfikatora liczbowego z adresu URL, który jest bardzo mylący. – Redth

6

Proszę uruchomić poniżej skrypt w terminalu

curl -X POST \ 
-H "Authorization: key= write here api_key" \ 
-H "Content-Type: application/json" \ 
-d '{ 
"registration_ids": [ 
"write here reg_id generated by gcm" 
], 
"data": { 
"message": "Manual push notification from Rajkumar" 
}, 
"priority": "high" 
}' \ 
https://android.googleapis.com/gcm/send 

to daje komunikat, jeśli jest następcą lub nie udało się

+5

MismatchSenderId ponieważ w tym samym urządzeniu zalogowałeś się przy użyciu różnych kluczy. aby rozwiązać problem odinstalować aplikację i uruchomić go againg i zaktualizować klucz rejestracyjny. a następnie uruchomić skrypt CURL w swoim teminalie, który zamieszczę powyżej, da wiadomość o powodzeniu i otrzymasz powiadomienie do twojego urządzenia. –

0

Użyj identyfikatora nadawcy & Klucz API wygenerowany tutaj: http://developers.google.com zamiast tego (najpierw przejdź do Google Cloud Messaging i postępuj zgodnie z instrukcjami).

20

Niedopasowanie występuje, gdy nie używasz identyfikatora numerycznego. Identyfikator projektu NIE JEST NADAWANYM ID !! Zajęło mi to 9 godzin, aby to zrozumieć. Dla całego zamieszania stworzonego przez google, sprawdź poniższy link, aby uzyskać numeryczny identyfikator.

https://console.cloud.google.com

zamiast

https://console.developers.google.com

Nadzieja pomaga !!

Aktualizacja: - Rzeczy zmieniły się ponownie. Teraz identyfikator nadawcy jest z firebase.

Przejdź do https://console.firebase.google.com i wybierz swój projekt. W ustawieniach -> wiadomości w chmurze możesz znaleźć identyfikator nadawcy.

I to działa!

+0

O Boże! Twój wpis zaoszczędził mi godzin ... Dzięki! –

0

Jeżeli zastosowanie dla natywnego Androida, sprawdź plik AndroidMaifest.xml:

<meta-data 
     android:name="onesignal_google_project_number" 
     android:value="str:1234567890" /> 
    <!--    its is correct. --> 

zamiast

<meta-data 
     android:name="onesignal_google_project_number" 
     android:value="@string/google_project_number" /> 

Nadzieja pomaga !!

3

Ostatnio napotkałem ten sam problem i próbowałem różnych wartości dla "gcm_sender_id" na podstawie identyfikatora projektu. Jednak wartość "gcm_sender_id" musi być ustawiona na "Numer projektu".

Możesz znaleźć tę wartość w: Menu> IAM & Administrator> Ustawienia.

patrz obrazek: GCM Project Number

1
InstanceID.getInstance(getApplicationContext()).getToken(authorizedEntity,scope) 

authorizedEntity jest numer projektu serwera

1

Android aplikacja potrzebuje do poprawnego numeru 12-cyfrowy identyfikator (aka GCM numer projektu). Jeśli ten 12-cyfrowy numer jest niepoprawny, otrzymasz również ten błąd.

Ten 12-cyfrowy numer znajduje się w Google Play konsolę pod konkretnej aplikacji, „Usługa & API” -> 'Linked IDS nadawcy

Powiązane problemy