FCM pobiera MismatchSenderId

88

Mam aplikację korzystającą z Google FCM do wysyłania powiadomień push.

Kiedy wysyłam powiadomienie push do grupy użytkowników, otrzymuję odpowiedź od MismatchSenderIdniektórych z nich. Mimo to wszyscy użytkownicy mają dokładnie tę samą aplikację. W jaki sposób niektórzy użytkownicy mogą uzyskać odpowiedź dotyczącą powodzenia, a inni MismatchSenderId?

Dużo badałem i upewniłem się, że dodałem wszystkie wymagania wstępne, których potrzebuje FCM.

Jakieś sugestie?

EDYTOWAĆ:

Przykładowa odpowiedź:

{"multicast_id":5340432438815499122,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}

EDYCJA 2:

Oto kod wysyłający po stronie serwera (PHP):

$fields = array
(
  'to' => $token,
  'data' => $data
);

$headers = array
(
  'Authorization: key=AIza**************************',
  'Content-Type: application/json'
);

$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, true );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode($fields) );
curl_exec( $ch );
curl_close( $ch );

AKTUALIZACJA:

Wygląda na to, że problem został rozwiązany dzięki aktualizacjom SDK. Używam teraz najnowszej com.google.firebase:firebase-messaging:9.6.1, nie otrzymuję już „MismatchSenderId”.

TareK Khoury
źródło
4
MismatchSenderId oznacza, że ​​Twój klient rejestruje się na innym serwerze niż ten, którego używasz do wysyłania. Czy wszyscy Twoi klienci rejestrują się w tym samym projekcie? Czy możesz również dołączyć odpowiedź MismatchSenderId w pytaniu?
Arthur Thompson
Tak, ten sam projekt, ta sama aplikacja, ten sam klucz serwera.
TareK Khoury
Czy możesz pokazać kod, w jaki sposób wysłałeś tę wiadomość? Mogę znać przyczynę problemu ...
AnZ,
3
@TareKhoury, dzięki. Po pierwsze. Upewnij się, że klucz autoryzacji, którego używasz, to Server Key(można go znaleźć w konsoli Firebase na karcie serwera), a nie API_KEYz google-service.json. Po drugie, upewnij się, że podałeś prawidłowe miejsce docelowe. Na przykład, to" : "/topics/yourtopic"jeśli chcesz wysłać wiadomość do wszystkich urządzeń (najpierw powinny zasubskrybować ten temat). Lub spróbuj wysłać do konkretnego urządzenia, wtedy trzeba wpisać token urządzenia (otrzymany przy pierwszym uruchomieniu w usłudze cec5gH04....92IyHrB2K
Firebase
3
Czy komuś udało się rozwiązać problem w ciągu ostatnich 2 lat?
Dylanthepiguy

Odpowiedzi:

36

Firebase zaktualizował klucze serwera do nowej wersji. Użyj nowych kluczy zamiast starego.

przejdź do ustawień-> ustawienia projektu-> zakładka wiadomości w chmurze

wprowadź opis obrazu tutaj

Jinu PC
źródło
Nie ma znaczenia, czy używasz klucza serwera, czy klucza starszego serwera
R15,
23

Znalazłem to rozwiązanie:

  • Najpierw sprawdzam, czy klucz serwera jest poprawny, czy nie, co jest jak AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • Następnie sprawdzam identyfikator nadawcy, taki jak 79XXXXXXXX, również był poprawny.
  • Główny problem dotyczy device_ID (UDID), do którego mam wysłać powiadomienie. Właściwie DeviceId, który mamy po stronie Androida w FCM, różni się od GCM . Nie można używać GCM stworzony Deviceid w FCM .
Nauman Khan
źródło
Bardzo mi pomogłeś. Musiałem poprosić programistę aplikacji o umieszczenie identyfikatora nadawcy w kodzie, a mój KLUCZ API FCM zadziałał. Wielkie dzięki.
Luis Milanese
3
Kiedy uaktualniamy nasz backend i aplikację na Androida do FCM, w jaki sposób możemy wysłać powiadomienie push do użytkowników, w jaki sposób są już zarejestrowani za pomocą tokenów GCM w zapleczu. ?
Pinkesh Darji,
System FCM obsługuje stare tokeny GCM developers.google.com/cloud-messaging/faq
Paras Diwan,
Cześć mężczyzno. Gdzie umieszczasz senderId? Widzę, że go nie używam i kilka dni temu mogłem wysyłać powiadomienia. Z góry dziękuję kolego
voghDev
Cześć @voghDev z zaplecza przy użyciu FCM Api ( fcm.googleapis.com/fcm/send ) wysyłając senderId w nagłówkach i po stronie aplikacji ten sam SenderId jest używany do tworzenia UDID (device_Id)
Nauman Khan
17

TO DZIAŁAŁO DLA MNIE:

  • SPRAWDŹ, Z KTÓRYM PROJEKT FIREBASE JEST POŁĄCZONY TWÓJ BIEŻĄCY PROJEKT ANDROID I UŻYJ Klucza Serwera Z TEGO PROJEKTU.

Używałem klucza serwera z innego projektu Firebase (powiedzmy z projektu 2). Użyłem tego samego klucza serwera, który był powiązany z moim projektem na Androida (Say Project 1) i zadziałało. Z mojego doświadczenia wynika, że ​​użycie jednej aplikacji Firebase dla jednego całego projektu Androida wydaje się rozwiązywać problem.

NepaliDeveloper
źródło
Miałem taką samą sytuację. Stary projekt połączony z aplikacją na Androida. Klucz serwera nowego projektu nie działa (zwraca błąd MismatchSenderId). Po usunięciu aplikacji na Androida ze starego projektu nowy klucz serwera z nowego projektu zaczął działać.
vk26
11

W moim przypadku po prostu pomyliłem się co do danych logowania do projektu: używając google-services.json z jednego projektu i klucza serwera z innego.

Luiz Fernando da Silva
źródło
11

Tylko do Twojej wiadomości. Wystąpił ten błąd, mimo że przysięgam, że testowana przeze mnie aplikacja na Androida została zbudowana przy użyciu najnowszego / najlepszego pliku google-services.json i mogłem wysłać z konsoli FCM do aplikacji. Przebudowałem aplikację po wykonaniu a Clean Projecti teraz mogę wysłać do aplikacji z tokenem FCM, który rejestruje. Więc może spróbuj czystej odbudowy, zanim zbyt długo uderzysz głową o ścianę.

Robert Thille
źródło
to było rozwiązanie dla mnie!
Gomino
Oba projekty wykorzystują nowy FCM i nadal był to problem. Uratowałem mój dzień!
Christian Kolb
6

Spędziliśmy wiele godzin, aby rozwiązać ten problem. Odkryliśmy, że token był generowany przy użyciu różnych ustawień konta FCM (google-services.json), a powiadomienia były ustawiane przy użyciu innego konta FCM. Kiedy zsynchronizowaliśmy oba, działało to jak urok.

Abdul Rauf
źródło
Mnie też się to przytrafiło. Upewnij się w 100%, że token wygenerowany dla twojego telefonu jest poprawnym środowiskiem do kompilacji (dev / alpha / prod)
ehacinom
4

Okazało się, że senderIdjest inny niż numer projektu w konsoli FCM,
więc ponownie pobrałem google-services.json i wszystko działa dobrze

Flowra
źródło
4

Mój problem został rozwiązany przez wprowadzenie prawidłowego klucza, jak pokazano poniżej.

Skopiuj klucz serwera, jak na tym obrazku wprowadź opis obrazu tutaj

A potem skopiuj ten kod w post man jak to zdjęcie wprowadź opis obrazu tutaj

i ciała jest rząd jak ten obraz

wprowadź opis obrazu tutaj UWAGA:

  • Musisz dodać klucz = przed kluczem serwera w nagłówku
  • Upewnij się, że poprawnie wpisałeś klucze nagłówka (Authorization = "key = ..." i ContentType = "application / json")
  • Wysłałeś żądanie na właściwy adres ( https://fcm.googleapis.com/fcm/send and Post)
abolfazl bazghandi
źródło
3
  • Sprawdziłem krzyżowo wszystkie poświadczenia

  • Dodano nowy klucz serwera i usunięto stary

  • Ponownie pobrano google-services.json

Nic nie rozwiązało problemu

Następnie po prostu wyczyszczę projekt i ponownie go odbuduję, po czym wszystko działa dobrze

Abraham Mathew
źródło
Ratujesz mój dzień: D
Tuan Luong
2

Upewnij się, że usunąłeś cały kod analizy z aplikacji (biblioteki, odbiorniki w pliku AndroidManifest itp.). Okazało się, że sporadyczne powiadomienia push nie działają. Z moich obserwacji wynika, że ​​będzie działać na nowych instalacjach, ale nie na aktualizacjach aplikacji ze sklepu Play.

Uważam, że coś wewnętrznego Parse było sprzeczne z FCM (Parse używa GCM, więc domyślam się, że miało to związek z jednoczesnym użyciem GCM i FCM). Jak tylko wyrwałem wszystkie odbiorniki Parse i biblioteki, wszystko działało świetnie.

Dziki
źródło
2

W rzeczywistości istnieje wiele przyczyn tego problemu. Mój był spowodowany przekazaniem nieprawidłowego tokena. Przekazywałem ten sam token wygenerowany z jednej aplikacji i używam tego samego tokena w innej aplikacji. Po zaktualizowaniu tokena działa dla mnie.

Shabir Mustafa
źródło
2

Aby wyeliminować ten błąd dla niezgodnego identyfikatora nadawcy w fcm

{"multicast_id":7751536172966571167,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}

wystąpił błąd,

  1. Dlatego najpierw wymagaliśmy, aby w FCM zarejestrować aplikację np. MyDemoApplication

  2. Następnie FCM wygeneruje klucz serwera, tj. AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHUIdentyfikator nadawcy, tj. W 346252831806takim formacie.

  3. Po w Android Studio, nasz projekt łączy się z tymi utworzonymi przez FCM projektami, tj. MyDemoApplication

  4. Najważniejszym krokiem jest wprowadzenie tokena urządzenia lub identyfikatora rejestracji. Ten token należy utworzyć w Android Studio.

  5. Po tym, używając identyfikatora nadawcy i klucza API w projekcie web API, na pewno otrzymasz powiadomienie

Akash
źródło
1

sprawdź gcm_sender_id w manifest.json Jeśli niezgodność - poprawna, ale musisz utworzyć nowych subskrybentów dla nowego identyfikatora nadawcy. Istnieje przerwa abonentów.

stasionok
źródło
1

Zgodnie z odpowiedzią „MismatchSenderId”, jest to niezgodność między FireBase a lokalnym „google-services.json”, musisz się upewnić, że oba manifesty są zgodne

W konsoli FireBase przejdź do „YourProject> Project OverView> Cloud Messaging”, a zobaczysz „SenderID”, który MUSI być zgodny z „google-services.json” w Twoim projekcie na Androida.

Najlepsze co możesz zrobić to pobrać ostateczny plik json z zakładki "Ogólne" i umieścić go w swoim projekcie.

Diego Sanabria
źródło
1

Wystąpił ten sam błąd podczas próby wysłania powiadomienia push. Pobierz zaktualizowany plik google-services.json i zastąp go. Pracował dla mnie.

Karthikeyan Ve
źródło
0

Miałem ten sam problem i naprawiłem go w ten sposób:

  1. Przejdź do konsoli Google FCM
  2. Wybierz swoją aplikację
  3. W menu po lewej stronie znajdź ikonę ustawień (standardowe koło)
  4. Kliknij na nią i po kliknięciu w ustawienia projektu
  5. Teraz skopiuj swój klucz serwera i wklej go w php

Voila ...

V. Sambor
źródło
0

Aktualizacja inicjalizacji Firebase działa dla mnie.

<script src="https://www.gstatic.com/firebasejs/4.6.2/firebase.js"></script>
 <script>
  // Initialize Firebase
  // TODO: Replace with your project's customized code snippet
  var config = {
    apiKey: "<API_KEY>",
    authDomain: "<PROJECT_ID>.firebaseapp.com",
    databaseURL: "https://<DATABASE_NAME>.firebaseio.com",
    storageBucket: "<BUCKET>.appspot.com",
    messagingSenderId: "<SENDER_ID>",
  };
  firebase.initializeApp(config);
</script>
Shivam Sihare
źródło
0

Dla mnie problem polegał na tym, że korzystałem z phonegap-plugin-pushin cordova, testując aplikację z aplikacją phonegap.

Problem polega na tym, że z jakiegoś powodu w przypadku tej wtyczki aplikacja phonegap przechwytuje ją i zwraca fałszywy klucz rejestracyjny, bez względu na posiadany identyfikator nadawcy.

Aby to działało (o ile masz wszystkie klucze w porządku), przetestuj swój program w inny sposób, za pomocą emulatora lub emulacji Androida przez USB. A twoje klucze będą pasować.

Mam nadzieję, że to komuś zaoszczędzi trochę czasu.

Pablo
źródło
0

prawdopodobnie robisz to, co ja. Token GCM nie jest już tym samym co FCM. sprawdź, czy pobierasz identyfikator tokena GCM zamiast FCM. po prostu zastąp FirebaseInstanceIdService i upewnij się, że uzyskasz właściwy identyfikator. Myślałem, że w pewnym momencie są takie same, ale teraz nie. zarejestrowałem test i zobaczyłem. po wykonaniu tej czynności zaktualizuj również google-services.json, jak mówią inni, dla bezpieczeństwa.

j2emanue
źródło
0

Marnowałem na to dni.

W moim przypadku śledziłem tego bloga, aby użyć Postmana i uzyskać błąd mismatchsenderid. Wcześniej dostawałemmessaging/mismatched-credential , a ludzie zgłaszali, że ich aplikacja kliencka używa wielu projektów.

Jednak dla mnie mam jeden do jednego, aplikację internetową i projekt. ALEng serve hostuję wszystkie aplikacje na domyślnym porcie 4200. Niezależnie od tego, na jakiej parze projekt / aplikacja pracowałem, zawsze otrzymywałem ten sam token z mojej aplikacji internetowej klienta AngularFireMessaging.requestToken- ten token był zawsze tokenem utworzonym podczas mojego pierwszego uruchomienie aplikacji Firebase w fazie rozwoju.

W ramach obejścia uruchamiam różne aplikacje / projekty na różnych portach i otrzymuję odpowiednie tokeny dla odpowiednich projektów.

dkelosky
źródło
0

Uwaga: Skróciłem pierwszą część tokena FCM (wcześniej : ) i wystąpił błądMismatchSenderId

Naprawiłem mój skrypt i teraz wszystko działa dobrze.

William Desportes
źródło
0

W moim przypadku ktoś usunął certyfikaty APN SSL dla mojej aplikacji w portalu programistycznym Apple.

  • Potrzebowałem stworzyć nowe certyfikaty: Identyfikatory / Mój AppId / Powiadomienia push / Edycja.
  • Następnie przesłałem je do projektu Firebase z konsoli: Ustawienia projektu / Komunikacja w chmurze / Konfiguracja aplikacji na iOS / Certyfikaty APN.

To rozwiązało problem.

Mihail Varbanov
źródło
0

W moim przypadku było to bardzo proste. Wyciągałem zły identyfikator rejestracyjny z bazy danych. Po tym, jak wyciągnąłem poprawny identyfikator, zadziałało.

Iwan Ross
źródło
0

Miałem ten sam problem w moim natywnym projekcie - node.js. Chciałem wysyłać powiadomienia w systemie Android. Wszystko było skonfigurowane i działało dobrze (tj. Mogłem wysyłać powiadomienia z node.js i otrzymywać powiadomienia na urządzeniu z Androidem).

Po kilku dniach musiałem użyć innego konta Firebase, więc zmieniłem plik google-services.json w folderze android / app mojego projektu i odbudowałem projekt. Ale kiedy ponownie spróbowałem wysłać powiadomienie z mojego serwera, pojawił się błąd -

{.............
  errorInfo: {
    code: 'messaging/mismatched-credential',
    message: 'SenderId mismatch'
  },
  codePrefix: 'messaging'
}

Rozwiązanie:

plik XML w tej lokalizacji - app / build / generated / res / google-services / {build_type} /values/values.xml nie był automatycznie aktualizowany zgodnie z nowym google-services.json . Wciąż składał się ze starych wartości z mojego poprzedniego pliku google-services.json . Musiałem zmienić values.xml ręcznie plik .

Tak wygląda plik app / build / generated / res / google-services / {build_type} /values/values.xml (musisz to zmienić ręcznie, jeśli nie aktualizuje się automatycznie zgodnie z google-services.json ) -

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <! -- Present in all applications -->
    <string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>

    <! -- Present in applications with the appropriate services configured -->
    <string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
    <string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
    <string name="ga_trackingId" translatable="false">UA-65557217-3</string>
    <string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
    <string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
    <string name="project_id" translatable="false">mydemoapp</string>

</resources> 

Możesz skorzystać z tych linków:

  1. https://firebase.google.com/docs/projects/multiprojects
  2. Przetwarzanie pliku JSON: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .
Mrunal Dhole
źródło
0

Miałem duży problem ze zrozumieniem, dlaczego otrzymuję status „MismatchSenderId”. Dodałem zależność gms w katalogu głównym, build.gradleale mój błąd w rzeczywistości nie polegał na zastosowaniu wtyczki gms w aplikacjibuild.gradle .

Jeśli nie masz tej linii w aplikacji build.gradle, może to być powód, dla którego powiadomienie nie działa: apply plugin: 'com.google.gms.google-services'

MartLav
źródło
0

Zauważyłem, że kiedy identyfikator urządzenia jest tworzony w GCM, nie możesz wysyłać wiadomości push przez FCM przy użyciu nowego klucza serwera, musisz użyć starego klucza API.

cewe
źródło
0

Próbowałem wysłać powiadomienie przy użyciu fcm api „https://fcm.googleapis.com/fcm/send” od listonosza. Klucz serwera był prawidłowy i token został wklejony poprawnie, ale nadal wyświetlał się błąd „MismatchSenderId”.

Następnie wprowadzono następującą zależność w pliku Gradle po stronie Androida.

implementation platform('com.google.firebase:firebase-bom:25.12.0') 

i zaczął otrzymywać powiadomienia na urządzeniu

shehzy
źródło
-3

Otrzymuję również ten sam błąd. skopiowałem api_key i zmieniłem go na google_services.json. potem to działa dla mnie

"api_key": [
        {
          "current_key": "********************"
        }
      ],

Spróbuj tego

Karthik Sridharan
źródło
-6

Będziesz mieć klucz serwera podobny do tego AIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVY dostępny w sekcji Ustawienia konsoli firebase console.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging .

Określ poprawny klucz za pomocą swojego kodu i spróbuj ponownie.

Hareesh
źródło
8
Używam prawidłowego klucza serwera. Gdybym nie był, otrzymywałbym „MismatchSenderId” dla wszystkich żądań, a nie dla „niektórych z nich”, jak wspomniano w pytaniu.
TareK Khoury