FCM nhận được MismatchSenderId


82

Tôi có một ứng dụng sử dụng Google FCM để gửi thông báo đẩy.

Khi tôi gửi thông báo đẩy tới một nhóm người dùng, tôi nhận được phản hồi của MismatchSenderIdmột số người trong số họ. Mặc dù vậy, tất cả người dùng đều có cùng một ứng dụng. Làm cách nào một số người dùng có thể nhận được phản hồi thành công và những người khác nhận được MismatchSenderId?

Tôi đã nghiên cứu rất nhiều và đảm bảo rằng tôi đã bổ sung tất cả các điều kiện tiên quyết mà FCM cần.

Bất kỳ đề xuất?

BIÊN TẬP:

Câu trả lời mẫu:

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

CHỈNH SỬA 2:

Đây là mã gửi phía máy chủ (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 );

CẬP NHẬT:

Có vẻ như vấn đề đã được giải quyết với các bản cập nhật SDK. Tôi hiện đang sử dụng phiên bản mới nhất com.google.firebase:firebase-messaging:9.6.1, tôi không nhận được "MismatchSenderId" nữa.


3
MismatchSenderId có nghĩa là máy khách của bạn đang đăng ký với một máy chủ khác với máy chủ bạn đang sử dụng để gửi. Tất cả khách hàng của bạn có đăng ký cùng một dự án không? Ngoài ra, bạn có thể đưa phản hồi MismatchSenderId vào câu hỏi không?
Arthur Thompson

Có, cùng một dự án, cùng một ứng dụng, cùng một khóa máy chủ.
TareK Khoury

Bạn có thể hiển thị mã của cách bạn gửi tin nhắn này không? Tôi có thể biết nguyên nhân của vấn đề ..
AnZ

3
@TareKhoury, cảm ơn. Đầu tiên. Đảm bảo rằng Khóa ủy quyền bạn sử dụng là Server Key(có thể được tìm thấy trong bảng điều khiển firebase trong tab máy chủ) chứ không phải API_KEYtừ google-service.json. Thứ hai, hãy đảm bảo rằng bạn đã đặt đích chính xác. Ví dụ: to" : "/topics/yourtopic"nếu bạn muốn gửi tin nhắn đến tất cả các thiết bị (họ nên đăng ký chủ đề đó trước). Hoặc cố gắng gửi đến thiết bị cụ thể, sau đó là cần thiết để gõ thiết bị token (nhận lên khi khởi đầu phục vụ căn cứ hỏa lực)cec5gH04....92IyHrB2K
ANZ

3
Có ai xoay sở để giải quyết vấn đề trong 2 năm qua không?
Dylanthepiguy

Câu trả lời:


35

Firebase đã nâng cấp khóa máy chủ của họ lên phiên bản mới. Sử dụng khóa mới thay vì khóa cũ.

đi tới cài đặt-> cài đặt dự án-> tab nhắn tin đám mây

nhập mô tả hình ảnh ở đây


Nó không thực hiện bất kỳ sự khác biệt nếu bạn đang sử dụng chính máy chủ hoặc máy chủ chính Legacy
R15

23

Tôi đã tìm thấy giải pháp này:

  • Đầu tiên, tôi kiểm tra khóa máy chủ có chính xác hay không, nó có chính xác không, giống như AIzaXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • Sau đó, tôi kiểm tra Sender Id như 79XXXXXXXX nó cũng chính xác.
  • Vấn đề chính là ở device_ID (UDID) mà tôi phải gửi thông báo. Trên thực tế DeviceId mà chúng tôi nhận được ở phía android trong FCM khác với GCM . Bạn không thể sử dụng DeviceId do GCM tạo trong FCM .

Bạn đã giúp tôi rất nhiều. Tôi đã phải yêu cầu nhà phát triển ứng dụng bao gồm id người gửi trên mã thì KEY API FCM của tôi mới hoạt động. Cảm ơn nhiều.
Luis Milanese

3
Khi chúng tôi nâng cấp chương trình phụ trợ và ứng dụng Android của mình lên FCM, Làm cách nào để sau đó chúng tôi có thể gửi thông báo đẩy cho người dùng về việc đã đăng ký mã thông báo GCM trong chương trình phụ trợ. ?
Pinkesh Darji,

Hệ thống FCM hỗ trợ các mã thông báo GCM cũ developer.google.com/cloud-messaging/faq
Paras Diwan

Chào bạn. Bạn đặt senderId ở đâu? Tôi thấy tôi không sử dụng nó và tôi đã có thể gửi thông báo vài ngày trước. Cảm ơn người bạn đời trước
voghDev

Hi @voghDev từ backend sử dụng FCM Api ( fcm.googleapis.com/fcm/send ) gửi SenderID trong tiêu đề và đứng về phía ứng dụng cùng SenderID được sử dụng để tạo ra UDID (DEVICE_ID)
Nauman Khan

15

ĐIỀU NÀY HIỆU QUẢ CHO TÔI:

  • KIỂM TRA DỰ ÁN FIREBASE NÀO DỰ ÁN ANDROID HIỆN TẠI CỦA BẠN ĐƯỢC LIÊN KẾT VÀ SỬ DỤNG Khóa Máy Chủ TỪ DỰ ÁN ĐÓ.

Tôi đang sử dụng khóa Máy chủ từ một dự án firebase khác (chẳng hạn như Dự án 2). Tôi đã sử dụng cùng một khóa máy chủ được liên kết với dự án Android của mình (Nói Dự án 1) và nó đã hoạt động. Theo kinh nghiệm của tôi, việc sử dụng một ứng dụng firebase cho toàn bộ dự án Android dường như khắc phục được sự cố.


Tôi đã đối mặt với tình huống tương tự. Dự án cũ được liên kết với ứng dụng Android. Và khóa máy chủ của dự án mới không hoạt động (trả về lỗi MismatchSenderId). Sau khi tôi xóa ứng dụng Android trong dự án cũ, khóa máy chủ mới từ dự án mới đã hoạt động.
vk26

11

Trong trường hợp của tôi, tôi chỉ nhầm về thông tin xác thực của dự án: sử dụng google-services.json từ một dự án và khóa máy chủ từ một dự án khác.


7

Chỉ là một FYI. Tôi đã gặp phải lỗi này, mặc dù tôi thề rằng ứng dụng android mà tôi đang thử nghiệm được tạo bằng tệp google-services.json mới nhất / tốt nhất và tôi có thể gửi từ bảng điều khiển FCM tới ứng dụng. Tôi đã xây dựng lại ứng dụng sau khi thực hiện Clean Projectvà bây giờ tôi có thể gửi đến ứng dụng bằng mã thông báo FCM mà nó đăng ký. Vì vậy, có thể thử xây lại sạch sẽ trước khi đập đầu vào tường quá lâu.


6

Chúng tôi đã dành hàng giờ đồng hồ để giải quyết vấn đề này. Những gì chúng tôi nhận thấy rằng mã thông báo đang được tạo bằng cài đặt tài khoản FCM khác nhau (google-services.json) và thông báo đang được đặt bằng tài khoản FCM khác. Khi chúng tôi đồng bộ hóa cả hai, nó hoạt động như một sự quyến rũ.


Điều này xảy ra với tôi quá. Đảm bảo 100% mã thông báo được tạo cho điện thoại của bạn là môi trường xây dựng chính xác (dev / alpha / prod)
ehacinom

4

Tôi thấy rằng số senderIdkhác với số dự án trong bảng điều khiển FCM
nên tôi đã tải xuống lại google-services.json và mọi thứ đều hoạt động tốt


4

Vấn đề của tôi đã được giải quyết bằng cách nhập đúng khóa như hình dưới đây.

Chép khóa Server như hình này nhập mô tả hình ảnh ở đây

Và sau đó sao chép mã này trong người đàn ông đăng bài như hình ảnh này nhập mô tả hình ảnh ở đây

và Body là hàng như hình này

nhập mô tả hình ảnh ở đây GHI CHÚ:

  • Bạn phải thêm key = trước Server key trong tiêu đề
  • Đảm bảo bạn nhập đúng các phím tiêu đề (Authorization = "key = ..." và ContentType = "application / json")
  • Bạn đã gửi yêu cầu đến đúng địa chỉ ( https://fcm.googleapis.com/fcm/send và phương thức Đăng)

3
  • Tôi đã xác minh chéo tất cả các bằng chứng xác thực

  • Đã thêm khóa máy chủ mới và xóa khóa cũ

  • Đã tải xuống lại google-services.json

Không có gì giải quyết được vấn đề

Sau đó, tôi chỉ cần dọn dẹp dự án và sau đó xây dựng lại dự án. Sau đó, nó hoạt động tốt


You save my day: D
Tuan Luong

2

Đảm bảo rằng bạn xóa tất cả mã Phân tích cú pháp khỏi ứng dụng của mình (thư viện, bộ thu trong AndroidManifest, v.v.). Tôi thấy rằng các thông báo đẩy liên tục không hoạt động. Theo quan sát của tôi, nó sẽ hoạt động trên các lượt cài đặt mới nhưng không hoạt động trên các bản cập nhật ứng dụng từ cửa hàng Play.

Tôi tin rằng điều gì đó bên trong Parse đang xung đột với FCM (Parse sử dụng GCM, vì vậy tôi đoán nó liên quan đến việc sử dụng GCM và FCM đồng thời). Ngay sau khi tôi tách ra tất cả các bộ thu và thư viện phân tích cú pháp, mọi thứ đã hoạt động tốt.


2

Thực ra có nhiều lý do cho vấn đề này. Của tôi là do mã thông báo không hợp lệ được chuyển. Tôi đã chuyển cùng một mã thông báo được tạo từ một ứng dụng và sử dụng cùng một mã thông báo trong một ứng dụng khác. Sau khi cập nhật mã thông báo, nó hoạt động với tôi.


2

Để loại bỏ lỗi này cho Id người gửi không khớp Trong fcm

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

có lỗi xảy ra,

  1. Vì vậy, trước tiên chúng tôi yêu cầu, Trong FCM, đăng ký Ứng dụng, ví dụ như MyDemoApplication

  2. Sau đó FCM sẽ tạo ra khóa máy chủ AIzaSyB9krC8mLHzO_TtECb5qg7NDZPxeG03jHUvà Id người gửi tức là 346252831806các định dạng như thế này.

  3. Sau Trong Android Studio, dự án của chúng tôi được kết nối với dự án được tạo FCM này tức là MyDemoApplication

  4. Và bước quan trọng nhất là bắt buộc phải có mã thông báo thiết bị hoặc id đăng ký. Mã thông báo này phải được tạo trong Android Studio ..

  5. Sau đó, sử dụng Id người gửi và khóa API trong dự án API web, bạn chắc chắn sẽ nhận được thông báo


1

kiểm tra gcm_sender_id trong tệp kê khai.json Nếu không khớp - đúng, nhưng bạn cần tạo người đăng ký mới cho Id người gửi mới. Người đăng ký tồn tại bị phá vỡ.


1

Theo phản hồi "MismatchSenderId", đây là sự không khớp giữa FireBase và "google-services.json" địa phương của bạn, bạn phải đảm bảo rằng cả hai tệp kê khai đều khớp

Trong bảng điều khiển FireBase, bạn đi tới "YourProject> Project OverView> Cloud Messaging", bạn sẽ thấy "SenderID" PHẢI khớp với "google-services.json" trong dự án Android của bạn.

Điều tốt nhất bạn có thể làm là tải xuống tệp json cuối cùng từ tab "Chung" và đặt nó vào dự án của bạn.


1

Tôi đã gặp lỗi tương tự khi cố gắng gửi thông báo đẩy. Tải tệp google-services.json đã cập nhật và thay thế bằng tệp đó. Đã làm cho tôi.


0

Tôi đã gặp vấn đề tương tự và tôi đã sửa nó như thế này:

  1. Truy cập bảng điều khiển google fcm của bạn
  2. Chọn ứng dụng của bạn
  3. Trong menu bên trái tìm biểu tượng cài đặt (bánh xe tiêu chuẩn)
  4. Nhấp vào nó và sau khi nhấp vào cài đặt dự án
  5. Bây giờ sao chép khóa máy chủ của bạn và dán nó vào php

Thì đấy ...


0

Cập nhật quá trình khởi tạo firebase phù hợp với tôi ..

<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

Đối với tôi, vấn đề là tôi đang sử dụng phonegap-plugin-pushtrong cordova, thử nghiệm ứng dụng với ứng dụng phonegap.

Vấn đề với điều này là vì một số lý do với plugin này, ứng dụng phonegap chặn nó và trả về một khóa đăng ký giả, bất kể bạn có ID người gửi nào.

Vì vậy, để làm cho nó hoạt động (miễn là bạn có tất cả các phím của mình đúng) là thử nghiệm chương trình của bạn theo một cách khác, với trình giả lập hoặc giả lập android qua usb. Và chìa khóa của bạn sẽ khớp.

Hy vọng rằng điều này sẽ giúp ai đó tiết kiệm thời gian.


0

có lẽ bạn đang làm việc mà tôi đã làm. Mã thông báo GCM không giống như FCM nữa. kiểm tra xem bạn có kéo ID mã thông báo GCM thay vì FCM hay không. chỉ cần ghi đè FirebaseInstanceIdService và đảm bảo bạn nhận được đúng ID. Tôi đã nghĩ tại một thời điểm chúng giống nhau nhưng bây giờ thì không. tôi đã đăng nhập một bài kiểm tra và thấy. sau khi bạn làm điều đó cũng cập nhật google-services.json như những người khác nói như một sự an toàn.


0

Tôi đã lãng phí ngày cho việc này.

Trong trường hợp của tôi, tôi đã theo dõi blog này để sử dụng Postman và gặp lỗi mismatchsenderid. Trước đây, tôi đã nhận được messaging/mismatched-credentialvà mọi người báo cáo rằng ứng dụng khách hàng của họ đã sử dụng nhiều dự án.

Tuy nhiên, đối với tôi, tôi có một-một, một ứng dụng web và một dự án. NHƯNG , tôi lưu trữ tất cả các ứng dụng qua ng servecổng mặc định 4200. Vì vậy, bất kể tôi đang phát triển cặp dự án / ứng dụng nào, tôi sẽ luôn nhận được cùng một mã thông báo từ ứng dụng web khách hàng của mình AngularFireMessaging.requestToken- mã thông báo này luôn là mã thông báo được tạo trong lần đầu tiên của tôi chạy ứng dụng firebase đang được phát triển.

Khi làm việc xung quanh, tôi bắt đầu các ứng dụng / dự án khác nhau trên các cổng khác nhau và nhận được các mã thông báo thích hợp cho các dự án tương ứng.


0

Lưu ý: Tôi đã cắt bớt phần đầu tiên của mã thông báo FCM (trước đó :) và lỗi làMismatchSenderId

Đã sửa kịch bản của tôi và bây giờ mọi thứ hoạt động tốt.


0

Trong trường hợp của tôi, ai đó đã xóa Chứng chỉ SSL APN cho ứng dụng của tôi trong cổng phát triển của Apple.

  • Tôi cần tạo chứng chỉ mới: Số nhận dạng / AppId của tôi / Thông báo đẩy / Chỉnh sửa.
  • Sau đó, tôi tải chúng lên dự án Firebase từ bảng điều khiển: Cài đặt dự án / Nhắn tin qua đám mây / cấu hình ứng dụng iOS / Chứng chỉ APN.

Điều này đã giải quyết vấn đề.


0

Trong trường hợp của tôi, nó rất đơn giản. Tôi đã lấy nhầm registerId từ cơ sở dữ liệu. Sau khi tôi kéo đúng Id, nó đã hoạt động.


0

Tôi đã gặp vấn đề tương tự trong dự án react-native - node.js của mình. Tôi muốn gửi thông báo trong Android. Mọi thứ đã được thiết lập và hoạt động tốt (tức là tôi đã có thể gửi thông báo từ node.js và nhận thông báo trên thiết bị Android).

Sau một vài ngày, tôi phải sử dụng một tài khoản firebase khác, vì vậy tôi đã thay đổi tệp google-services.json trong thư mục android / app của dự án và xây dựng lại dự án. Tuy nhiên, khi tôi thử gửi thông báo từ máy chủ của mình một lần nữa, tôi đã gặp lỗi -

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

Giải pháp:

tệp XML tại vị trí - app / build / created / res / google-services / {build_type} /values/values.xml không được cập nhật tự động theo google-services.json mới . Nó vẫn bao gồm các giá trị cũ từ tệp google-services.json trước đây của tôi . Tôi đã phải thay đổi tệp value.xml theo cách thủ công.

Đây là giao diện của tệp app / build / create / res / google-services / {build_type} /values/values.xml (Bạn cần thay đổi nó theo cách thủ công nếu nó không được cập nhật tự động theo 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> 

Bạn có thể tham khảo các liên kết này:

  1. https://firebase.google.com/docs/projects/multiprojects
  2. Xử lý tệp JSON: https://developers.google.com/android/guides/google-services-plugin#processing_the_json_file .

0

Tôi gặp khó khăn lớn khi tìm hiểu lý do tại sao tôi nhận được trạng thái "MismatchSenderId". Tôi đã thêm phần phụ thuộc gms vào thư mục gốc build.gradlenhưng lỗi của tôi thực sự là không áp dụng plugin gms trong ứng dụng build.gradle.

Nếu bạn không có dòng này trong ứng dụng build.gradle, đây có thể là lý do tại sao thông báo không hoạt động: apply plugin: 'com.google.gms.google-services'


0

Tôi nhận thấy rằng khi id thiết bị được tạo trong GCM, bạn không thể gửi thông báo đẩy qua FCM bằng khóa máy chủ mới, bạn phải sử dụng khóa API cũ.


0

Tôi đang cố gắng gửi thông báo bằng cách sử dụng fcm api "https://fcm.googleapis.com/fcm/send" từ người đưa thư. Khóa máy chủ đã ổn và mã thông báo đã được dán tốt nhưng vẫn gặp lỗi "MismatchSenderId".

Sau đó, giới thiệu sự phụ thuộc follwoing trong tệp gradle ở phía android.

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

và nó bắt đầu nhận thông báo trên thiết bị


-3

Tôi cũng nhận được lỗi tương tự. tôi đã sao chép api_key và thay đổi thành google_services.json. sau đó nó làm việc cho tôi

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

thử đi


-6

Bạn sẽ có một khóa máy chủ như thế này AIzaSyDiTEVq4Li1pj7IyraRlyRU9adc-49-KVY khả dụng trong phần Cài đặt của bảng điều khiển firebase console.firebase.google.com/project/project-XXXXXXXXXXXXX/settings/cloudmessaging .

Chỉ định khóa chính xác với mã của bạn và thử lại.


8
Tôi đang sử dụng đúng khóa máy chủ. Nếu không, tôi sẽ nhận được "MismatchSenderId" cho tất cả các yêu cầu chứ không phải cho "một số chúng" như đã đề cập trong câu hỏi.
TareK Khoury
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.