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 MismatchSenderId
niektó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”.
firebase
firebase-cloud-messaging
TareK Khoury
źródło
źródło
Server Key
(można go znaleźć w konsoli Firebase na karcie serwera), a nieAPI_KEY
zgoogle-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łudzecec5gH04....92IyHrB2K
Odpowiedzi:
Firebase zaktualizował klucze serwera do nowej wersji. Użyj nowych kluczy zamiast starego.
źródło
Znalazłem to rozwiązanie:
źródło
TO DZIAŁAŁO DLA MNIE:
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.
źródło
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.
źródło
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 Project
i 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ę.źródło
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.
źródło
Okazało się, że
senderId
jest inny niż numer projektu w konsoli FCM,więc ponownie pobrałem google-services.json i wszystko działa dobrze
źródło
Mój problem został rozwiązany przez wprowadzenie prawidłowego klucza, jak pokazano poniżej.
Skopiuj klucz serwera, jak na tym obrazku
A potem skopiuj ten kod w post man jak to zdjęcie
i ciała jest rząd jak ten obraz
UWAGA:
źródło
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
źródło
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.
źródło
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.
źródło
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,
Dlatego najpierw wymagaliśmy, aby w FCM zarejestrować aplikację np. MyDemoApplication
Następnie FCM wygeneruje klucz serwera, tj.
AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHU
Identyfikator nadawcy, tj. W346252831806
takim formacie.Po w Android Studio, nasz projekt łączy się z tymi utworzonymi przez FCM projektami, tj. MyDemoApplication
Najważniejszym krokiem jest wprowadzenie tokena urządzenia lub identyfikatora rejestracji. Ten token należy utworzyć w Android Studio.
Po tym, używając identyfikatora nadawcy i klucza API w projekcie web API, na pewno otrzymasz powiadomienie
źródło
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.
źródło
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.
źródło
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.
źródło
Miałem ten sam problem i naprawiłem go w ten sposób:
Voila ...
źródło
Aktualizacja inicjalizacji Firebase działa dla mnie.
źródło
Dla mnie problem polegał na tym, że korzystałem z
phonegap-plugin-push
in 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.
źródło
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.
źródło
Marnowałem na to dni.
W moim przypadku śledziłem tego bloga, aby użyć Postmana i uzyskać błąd mismatchsenderid. Wcześniej dostawałem
messaging/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. ALE
ng 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 klientaAngularFireMessaging.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.
źródło
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.
źródło
W moim przypadku ktoś usunął certyfikaty APN SSL dla mojej aplikacji w portalu programistycznym Apple.
To rozwiązało problem.
źródło
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.
źródło
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 -
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 ) -
Możesz skorzystać z tych linków:
źródło
Miałem duży problem ze zrozumieniem, dlaczego otrzymuję status „MismatchSenderId”. Dodałem zależność gms w katalogu głównym,
build.gradle
ale 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'
źródło
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.
źródło
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.
i zaczął otrzymywać powiadomienia na urządzeniu
źródło
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
Spróbuj tego
źródło
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.
źródło