FCM MismatchSenderId alıyor


88

Push bildirimleri göndermek için Google FCM kullanan bir uygulamam var.

Bir grup kullanıcıya push bildirimi gönderdiğimde, MismatchSenderIdbazıları için yanıt alıyorum. Yine de, tüm kullanıcılar aynı uygulamaya sahiptir. Bazı kullanıcılar nasıl başarılı bir yanıt alırken diğerleri bir MismatchSenderId alabilir?

Çok araştırma yaptım ve FCM'nin ihtiyaç duyduğu tüm ön koşulları ekledim.

Herhangi bir öneri?

DÜZENLE:

Örnek yanıt:

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

DÜZENLEME 2:

İşte sunucu tarafı gönderme kodu (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 );

GÜNCELLEME:

SDK güncellemeleri ile sorunun çözüldüğü görülüyor. Şimdi en yenisini kullanıyorum, artık com.google.firebase:firebase-messaging:9.6.1"MismatchSenderId" alamıyorum.


4
MismatchSenderId, istemcinizin göndermek için kullandığınızdan farklı bir sunucuya kaydolduğu anlamına gelir. Tüm müşterileriniz aynı projeye kaydoluyor mu? MismatchSenderId yanıtını da soruya dahil edebilir misiniz?
Arthur Thompson

Evet, aynı proje, aynı uygulama, aynı sunucu anahtarı.
TareK Khoury

Bu mesajı nasıl gönderdiğinizin kodunu gösterebilir misiniz? Sorunun nedenini biliyor olabilirim ..
AnZ

3
@TareKhoury, teşekkürler. Her şeyden önce. Kullanmak Yetkilendirme anahtardır emin olun Server Key(sunucu sekmesinde Firebase konsolunda bulunamadı) ve API_KEYgelen google-service.json. İkinci olarak, hedefi doğru ayarladığınızdan emin olun. Örneğin, to" : "/topics/yourtopic"tüm cihazlara mesaj göndermek istiyorsanız (önce o konuya abone olmaları gerekir). Veya belirli bir cihaza göndermeyi deneyin, ardından cihaz jetonunu yazmanız gerekir (firebase hizmetinde ilk başlatıldığında alınır)cec5gH04....92IyHrB2K
AnZ

3
Son 2 yılda problemi çözmeyi başaran oldu mu?
Dylanthepiguy

Yanıtlar:


36

Firebase, sunucu anahtarlarını yeni sürüme yükseltti. Eski anahtar yerine yeni anahtarlar kullanın.

ayarlar-> proje ayarları-> bulut mesajlaşma sekmesine gidin

görüntü açıklamasını buraya girin


Sunucu anahtarı VEYA Eski sunucu anahtarı kullanıyorsanız
R15

23

Bu çözümü buldum:

  • Önce sunucu anahtarının doğru olup olmadığını kontrol ettim, AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX gibi
  • Sonra 79XXXXXXXX gibi Gönderen Kimliğini kontrol ettim, bu da doğru.
  • Ana sorun, bildirimi göndermem gereken device_ID (UDID) idi . Aslında biz de android tarafında var Deviceıd FCM farklıdır GCM . Sen kullanamazsınız GCM yarattı Deviceıd içinde FCM .

Bana çok yardımcı oldun Uygulama geliştiricisinden koda gönderen kimliğini eklemesini istemem gerekti, ardından FCM API KEY'im çalıştı. Çok teşekkürler.
Luis Milanese

3
Arka uç ve Android uygulamamızı FCM'ye yükselttiğimizde, kullanıcılara arka uçta GCM jetonlarına zaten nasıl kayıtlı olduklarına dair nasıl bir push bildirimi gönderebiliriz. ?
Pinkesh Darji

FCM sistemi, eski GCM belirteçlerini destekler developer.google.com/cloud-messaging/faq
Paras Diwan

Merhaba dostum. Gönderen kimliğini nereye yerleştirirsiniz? Kullanmadığımı görüyorum ve birkaç gün önce bildirim gönderebildim. Şimdiden teşekkürler dostum
voghDev

FCM Api'yi ( fcm.googleapis.com/fcm/send ) kullanarak arka uçtan Merhaba @voghDev, üstbilgilerde gönderen kimliğini gönderiyor ve uygulama tarafında aynı SenderId , UDID (device_Id) oluşturmak için kullanılıyor
Nauman Khan

17

BU BENİM İÇİN ÇALIŞTI:

  • GÜNCEL ANDROID PROJENİZİN HANGİ FIREBASE PROJESİNİN BAĞLANTILI OLDUĞUNU KONTROL EDİN VE BU PROJEDEN Sunucu Anahtarını KULLANIN .

Farklı bir firebase projesinden Sunucu anahtarını kullanıyordum (örneğin Proje 2). Android projeme (Say Project 1) bağlı olarak aynı sunucu anahtarını kullandım ve işe yaradı. Deneyimlerime göre, tüm bir android projesi için bir firebase uygulaması kullanmak sorunu çözmüş gibi görünüyordu.


Ben de aynı durumla karşılaştım. Android uygulamasına bağlı eski proje. Ve yeni projenin sunucu anahtarı çalışmıyor (MismatchSenderId hatası döndür). Eski projede android uygulamasını kaldırdıktan sonra, yeni projeden yeni sunucu anahtarı çalıştı.
vk26

11

Benim durumumda, proje kimlik bilgileri hakkında yanıldım: bir projeden google-services.json ve diğerinden sunucu anahtarını kullanmak.


11

Sadece bir Bilginize. Test ettiğim android uygulamasının en son / en büyük google-services.json dosyasıyla oluşturulduğuna ve FCM konsolundan uygulamaya gönderebileceğime yemin etsem de bu hatayla karşılaşıyordum . A yaptıktan sonra uygulamayı yeniden oluşturdum Clean Projectve şimdi kaydettiği FCM belirteci ile uygulamaya gönderebilirim. Bu yüzden, kafanızı duvara uzun süre vurmadan önce temiz bir yeniden inşa etmeyi deneyebilirsiniz.


bu benim için çözümdü!
Gomino

Her iki proje de yeni FCM'yi kullanıyor ve bu hala sorun oldu. Günümü kurtardım!
Christian Kolb

6

Bu sorunu çözmek için saatler harcadık. Jetonun farklı FCM hesap ayarları (google-services.json) kullanılarak oluşturulduğunu ve bildirimin farklı FCM hesabı kullanılarak ayarlandığını bulduk. İkisini de senkronize ettiğimizde harika çalıştı.


Bu bana da oldu. Telefonunuz için oluşturulan jetonun doğru derleme ortamı olduğundan% 100 emin olun (dev / alpha / prod)
ehacinom

4

senderIdFCM konsolundaki proje numarasından farklı olduğunu buldum, bu
yüzden google-services.json dosyasını yeniden indirdim ve her şey yolunda gidiyor


4

Aşağıda gösterildiği gibi doğru anahtarı girerek sorunum çözüldü.

Sunucu anahtarını bu resim gibi kopyalayıngörüntü açıklamasını buraya girin

Ve sonra bu kodu bu resimdeki gibi postacıya kopyalayın görüntü açıklamasını buraya girin

ve Gövde bu resim gibi satırdır

görüntü açıklamasını buraya girin NOT:

  • Başlığa Sunucu anahtarından önce key = eklemelisiniz
  • Başlık anahtarlarını doğru girdiğinizden emin olun (Authorization = "key = ..." ve ContentType = "application / json")
  • İsteği doğru adrese gönderdiniz ( https://fcm.googleapis.com/fcm/send ve Gönderi yöntemi)

3
  • Tüm kimlik bilgilerini çapraz doğruladım

  • Yeni sunucu anahtarı eklendi ve eskisi silindi

  • Google-services.json yeniden indirildi

Hiçbir şey sorunu çözmedi

Sonra projeyi temizlerim ve sonra projeyi yeniden kurarım.


Günümü kurtardın: D
Tuan Luong

2

Uygulamanızdan (kitaplıklar, AndroidManifest'teki alıcılar vb.) Tüm Ayrıştırma kodunu kaldırdığınızdan emin olun. Ara sıra push bildirimlerinin çalışmadığını fark ettim. Gözlemlerime göre, yeni yüklemelerde işe yarayacak, ancak oyun mağazasından uygulama güncellemelerinde işe yaramayacak.

Ayrıştırmaya dahil olan bir şeyin FCM ile çeliştiğine inanıyorum (Ayrıştırmada GCM kullanılıyor, bu yüzden GCM ve FCM'yi aynı anda kullanmakla ilgisi olduğunu tahmin ediyorum). Tüm Parse alıcılarını ve kitaplıklarını söktüğüm anda her şey harika gitti.


2

Aslında bu sorunun pek çok nedeni var. Benimki geçersiz jeton yüzünden oldu. Bir uygulamadan oluşturulan aynı jetonu ve başka bir uygulamada aynı jetonu kullanıyordum. Jeton güncellendiğinde, benim için çalışıyor.


2

Fcm'de uyuşmazlık gönderen kimliği için bu hatayı ortadan kaldırmak için

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

hata oluştu

  1. Bu yüzden önce FCM'de Uygulamayı kaydettirmemiz gerekiyor, örneğin MyDemoApplication

  2. Bundan sonra FCM, sunucu anahtarı, yani AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHUve gönderen kimliği, örn.346252831806 bunlar gibi bu biçimleri oluşturacaktır.

  3. Android Studio'da sonra, projemiz bu FCM tarafından oluşturulan projeye, yani MyDemoApplication'a bağlanır.

  4. Ve en önemli adım, cihaz belirteci veya kayıt kimliği için gereklidir. Bu simge, Android Studio'da oluşturulmalıdır ..

  5. Bundan sonra web API projesinde Sender Id ve API anahtarını kullanarak kesinlikle bildirim alacaksınız


1

manifest.json içinde gcm_sender_id'i kontrol edin Uyumsuzsa - doğrudur, ancak yeni gönderen kimliği için yeni aboneler oluşturmanız gerekir. Mevcut aboneler kırılır.


1

"MismatchSenderId" yanıtına göre, bu FireBase ve yerel "google-services.json" arasındaki bir uyumsuzluktur, her iki bildirimin eşleştiğinden emin olmalısınız

FireBase konsolunda "Projeniz> Proje Genel Görünümü> Bulut Mesajlaşma" seçeneğine gidersiniz, Android projenizdeki "google-services.json" ile eşleşmesi GEREKEN "Gönderen Kimliği" ni göreceksiniz.

Yapabileceğiniz en iyi şey, son json dosyasını "Genel" sekmesinden indirip projenize yerleştirmektir.


1

Push bildirimi göndermeye çalışırken aynı hatayı aldım. Güncellenmiş google-services.json dosyasını alın ve bununla değiştirin. Benim için çalıştı.


0

Aynı sorunu yaşadım ve şu şekilde düzelttim:

  1. Google fcm konsolunuza gidin
  2. Uygulamanızı seçin
  3. Sol taraftaki menüde ayarlar simgesini bulun (standart tekerlek)
  4. Üzerine tıklayın ve proje ayarlarına tıkladıktan sonra
  5. Şimdi sunucu anahtarınızı kopyalayın ve php'ye yapıştırın

Voila ...


0

Firebase başlatmayı güncellemek benim için çalışıyor ..

<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>

0

Benim için sorun şu ki, phonegap-plugin-push in cordova'yı kullanarak uygulamayı phonegap uygulamasıyla test ediyor olmamdı.

Bununla ilgili sorun, herhangi bir nedenle bu eklentiyle, phonegap uygulamasının onu durdurması ve sahip olduğunuz gönderici kimliğine bakılmaksızın sahte bir kayıt anahtarı döndürmesidir.

Bu yüzden çalışmasını sağlamak için (tüm anahtarlarınızı doğru tuttuğunuz sürece), programınızı başka bir şekilde, bir emülatörle veya usb üzerinden android öykünmesiyle test etmektir. Ve anahtarlarınız eşleşecek.

Umarım bu, birine biraz zaman kazandırır.


0

Muhtemelen benim yaptığımı yapıyorsun. GCM jetonu artık FCM ile aynı değil. FCM yerine GCM jeton kimliğini alıp almadığınızı kontrol edin. FirebaseInstanceIdService'i geçersiz kılmanız ve doğru kimliği aldığınızdan emin olmanız yeterlidir. Bir noktada aynı olduklarını düşündüm ama şimdi yok. bir test kaydettim ve gördüm. Bunu yaptıktan sonra, google-services.json'un da güvenlik olarak söylediği gibi güncelleyin.


0

Bunun için günleri boşa harcadım.

Benim durumumda, Postman'ı kullanmak ve mismatchsenderid hatasını almak için bu blogu takip ettim . Daha önce alıyordummessaging/mismatched-credential ve insanlar müşteri uygulamalarının birden fazla proje kullandığını bildirdi.

Ancak benim için bire bir, bir web uygulamam ve bir projem var. ANCAK , tüm uygulamaları ng servevarsayılan bağlantı noktası 4200 üzerinden barındırıyorum . Bu nedenle, geliştirdiğim proje / uygulama çiftinden bağımsız olarak, istemci web uygulamamdan her zaman aynı belirteci kullanarakAngularFireMessaging.requestToken - bu jeton her zaman ilk kez oluşturulan jetondu geliştirilmekte olan bir firebase uygulamasının çalıştırılması.

Bir çözüm olarak, farklı bağlantı noktalarında farklı uygulamalar / projeler başlatıyorum ve ilgili projeler için uygun belirteçler alıyorum.


0

Not: FCM belirtecinin ilk bölümünü kesmiştim (daha önce : ) ve hataMismatchSenderId

Senaryom düzeltildi ve şimdi her şey iyi çalışıyor.


0

Benim durumumda birisi Apple geliştirme portalındaki uygulamam için APN SSL Sertifikalarını silmişti.

  • Yeni sertifikalar oluşturmam gerekiyordu: Tanımlayıcılar / UygulamaKimim / Anında Bildirimler / Düzenle.
  • Sonra bunları konsoldan Firebase projesine yükledim: Proje Ayarları / Bulut Mesajlaşma / iOS uygulama yapılandırması / APNs Sertifikaları.

Bu sorunu çözdü.


0

Benim durumumda çok basitti. Veritabanından yanlış kayıt kimliğini alıyordum. Doğru kimliği aldıktan sonra işe yaradı.


0

React-native - node.js projemde de aynı sorunu yaşadım. Android'de bildirim göndermek istedim. Her şey kuruldu ve iyi çalışıyordu (yani, node.js'den bildirimler gönderebildim ve android cihazda bildirimler alabildim).

Birkaç gün sonra farklı bir firebase hesabı kullanmak zorunda kaldım, bu yüzden projemin android / app klasöründeki google-services.json dosyasını değiştirdim ve projeyi yeniden oluşturdum. Ancak sunucumdan bir kez daha bildirim göndermeyi denediğimde bir hata aldım -

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

Çözüm:

konumdaki XML dosyası - app / build / generated / res / google-services / {build_type} /values/values.xml , new google-services.json'a göre otomatik olarak güncellenmiyordu . Hala önceki google-services.json dosyamdaki eski değerlerden oluşuyordu . Values.xml'yi değiştirmek zorunda kaldım dosyasını manuel .

Bu nasıl uygulama / build / üretilen / res / google-hizmetler / {build_type} /values/values.xml dosya bakmak (Sen güncellenen almaz cihazı manuel olarak değiştirmeniz gerekir otomatik uyarınca -services.json google ) -

<?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> 

Şu bağlantılara başvurabilirsiniz:

  1. https://firebase.google.com/docs/projects/multiprojects
  2. JSON dosyasının işlenmesi: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .

0

Neden "MismatchSenderId" statüsü aldığımı anlamakta büyük zorluk yaşadım. Kökte gms bağımlılığını ekledim build.gradleancak benim hatam aslında uygulamada gms eklentisini uygulamamaktıbuild.gradle .

Uygulamada bu satır yoksa build.gradle, bildirimin çalışmamasının nedeni bu olabilir: apply plugin: 'com.google.gms.google-services'


0

GCM'de bir cihaz kimliği oluşturulduğunda, yeni sunucu anahtarını kullanarak FCM aracılığıyla push mesajları gönderemeyeceğinizi, eski API anahtarını kullanmanız gerektiğini fark ettim.


0

Postacıdan fcm api "https://fcm.googleapis.com/fcm/send" kullanarak bildirim göndermeye çalışıyordum. Sunucu anahtarı tamamdı ve belirteç düzgün bir şekilde yapıştırıldı ancak yine de "MismatchSenderId" hatası alıyordu.

Ardından, android tarafında gradle dosyasında follwoing bağımlılığı tanıtıldı.

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

ve cihazda bildirimler almaya başladı


-3

Ben de aynı hatayı alıyorum. api_key'i kopyaladım ve google_services.json olarak değiştirdim. ondan sonra benim için çalışıyor

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

bunu dene


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.