Tại sao tôi nhận được “MismatchSenderId” từ phía máy chủ GCM?


76

Tôi đang cố gắng tạo một dịch vụ đẩy cho ứng dụng Android của mình và tôi làm theo tài liệu và ví dụ của Google GCM cho vấn đề này:

Tôi có thể đăng ký / hủy đăng ký ứng dụng Android của mình. Từ phía máy chủ của tôi, tôi có thể thấy rằng tôi đã đăng ký một gói đăng ký, nhưng khi tôi cố gắng gửi tin nhắn từ máy chủ tới ứng dụng Android của mình, tôi luôn gặp lỗi sau:

Lỗi khi gửi tin nhắn tới thiết bị # 0: MismatchSenderId

Đối với ứng dụng Android của tôi, tôi sử dụng SENDER_ID = 200000000001.

Và đối với phía máy chủ của tôi như Google nói, tôi sử dụng API_KEY = AIzxxxxxxxxxxxxxxxxXxxXxxXxxxXXXXXxxxxs

Tôi đã theo dõi tài liệu này:

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

Tôi cũng đã bật GCM trong bảng API Google của mình, nhưng tôi sẽ nhận được thông báo lỗi khó chịu đó.

Làm cách nào để khắc phục sự cố này?


Kiểm tra trong file manifest.json cho ID người gửi GCM
Shivappa

Câu trả lời:


68

Máy chủ của bạn có sử dụng ID đăng ký mới do máy chủ GCM trả về cho ứng dụng của bạn không? Tôi đã gặp sự cố này nếu cố gắng gửi tin nhắn đến các ID đăng ký được cung cấp bởi máy chủ C2DM cũ.

Và cũng kiểm tra kỹ ID người gửi và API_KEY, chúng phải khớp nhau nếu không bạn sẽ gặp lỗi MismatchSenderId đó. Trong Bảng điều khiển API của Google, hãy xem URL của dự án của bạn:

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

Xxxxxxxxx là ID dự án, là ID người gửi.

Và đảm bảo rằng Khóa API thuộc về 'Khóa cho các ứng dụng máy chủ (có khóa IP)'


Tôi có một nghi ngờ rất lớn ở đây. Liệu có thể triển khai ứng dụng của tôi để tải các điện thoại di động khác chỉ với một SERIALID không?
Seyed Vahid Hashemi

3
Bạn đã xem tổng quan kiến ​​trúc GCM developer.android.com/guide/google/gcm/gcm.html chưa? Mọi điện thoại Android đang sử dụng ứng dụng của bạn sẽ đăng ký GCM bằng ID người gửi của ứng dụng và chúng sẽ nhận được một ID đăng ký GCM duy nhất mà bạn phải lưu trữ trên máy chủ của mình. Nếu bạn muốn gửi một tin nhắn cho tất cả người dùng của mình, bạn cần phải thực hiện tất cả các id đăng ký đó.
azgolfer

7
Điều này thực sự ngớ ngẩn, nhưng nó hoạt động. ID dự án được liệt kê trong trang trên bảng điều khiển là một id có tên mà tôi phải chọn, tuy nhiên bạn phải sử dụng ID số từ url, điều này rất khó hiểu.
Redth

2
Đã khiến tôi mất nhiều thời gian để tìm ra câu trả lời này @azgolfer, bạn là một huyền thoại. Các bạn hãy kiểm tra lại id đăng ký mới của bạn! Điều đó đã sửa nó cho tôi.
SergioM

5
Thông tin này có thể đã lỗi thời. Bây giờ bạn nên sử dụng dự án của mình NUMBER
Ethan Fischer,

24

Không khớp xảy ra khi bạn không sử dụng ID số. ID dự án KHÔNG ĐƯỢC GỬI ID !! Tôi đã mất 9 giờ để tìm ra điều này. Đối với tất cả sự nhầm lẫn do google tạo ra, hãy kiểm tra liên kết sau để lấy id số.

https://console.cloud.google.com

thay vì

https://console.developers.google.com

Hy vọng nó giúp!!

Cập nhật: - Mọi thứ lại thay đổi. Bây giờ id người gửi là với firebase.

Truy cập https://console.firebase.google.com và chọn dự án của bạn. Trong cài đặt -> nhắn tin đám mây, bạn có thể tìm thấy id người gửi.

Và nó hoạt động!


Ôi Chúa ơi! Bài viết của bạn đã tiết kiệm cho tôi hàng giờ ... Cảm ơn!
Peter Moskala

7

Vui lòng chạy tập lệnh bên dưới trong thiết bị đầu cuối của bạn

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

nó sẽ đưa ra thông báo nếu nó thành công hay thất bại


6
MismatchSenderId vì trên cùng một thiết bị, bạn đã đăng nhập bằng các phím khác nhau. để giải quyết vấn đề này, hãy gỡ cài đặt ứng dụng và chạy nó nhanh chóng và cập nhật khóa đăng ký. và sau đó chạy kịch bản CURL trong teminal của bạn mà tôi gửi ở trên nó sẽ cho thông báo thành công và bạn sẽ nhận được thông báo tới điện thoại của bạn
Raj Kumar

4

Gần đây, tôi gặp sự cố tương tự và tôi đã thử các giá trị khác nhau cho "gcm_sender_id" dựa trên ID dự án. Tuy nhiên, giá trị "gcm_sender_id" phải được đặt thành "Số dự án".

Bạn có thể tìm thấy giá trị này trong: Menu> IAM & Admin> Cài đặt.

Xem ảnh chụp màn hình: Số dự án GCM


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

AuthorityEntity là số dự án của máy chủ


2

Ứng dụng Android của bạn cần sửa id số gồm 12 chữ số (còn gọi là Số dự án GCM). Nếu 12 chữ số này không chính xác, thì bạn cũng sẽ gặp lỗi này.

Số gồm 12 chữ số này được tìm thấy trong Google Play Console của bạn trong ứng dụng cụ thể của bạn, 'Dịch vụ & API' -> 'ID NGƯỜI GỬI ĐƯỢC LIÊN KẾT'


2

Điều này xảy ra khi tham số HTTP của khóa máy chủ và thông số S ender ID yêu cầu HTTP không khớp với nhau. Về cơ bản, cả ID máy chủ và Khóa máy chủ phải thuộc cùng một dự án firebase. Hãy tham khảo hình ảnh bên dưới. Trong trường hợp trộn các tham số này từ các dự án Firebase tham chiếu sẽ gây ra lỗi MismatchSenderId nhập mô tả hình ảnh ở đây


0

Kiểm tra google-services.jsontệp trong appthư mục của dự án Android của bạn. Tạo một cái mới từ bảng điều khiển Firebase nếu bạn không chắc chắn. Tôi gặp lỗi này trong hai trường hợp.

  1. Tôi đã sử dụng một dự án Firebase thử nghiệm với ứng dụng thử nghiệm (có chứa google-services.jsontệp bên phải ). Sau đó, tôi đã cố gắng gửi thông báo đẩy đến một ứng dụng khác và gặp lỗi này ('"error": "MismatchSenderId"'). Tôi hiểu rằng ứng dụng thứ hai bị ràng buộc với một dự án Firebase khác với dự án khác google-services.json. Vì các khóa máy chủ khác nhau, yêu cầu phải được viết lại.

  2. Tôi đã thay đổi google-services.jsontrong ứng dụng vì tôi muốn thay thế dự án Firebase thử nghiệm bằng một dự án thực tế . Tôi đã tạo đúng google-services.jsontệp, thay đổi yêu cầu, nhưng vẫn nhận được lỗi này. Vào ngày hôm sau, nó đã tự sửa chữa. Tôi nghi ngờ Firebase không cập nhật đồng bộ.

Để nhận khóa máy chủ cho yêu cầu, hãy mở https://console.firebase.google.com và chọn một dự án thích hợp.

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

Sau đó dán nó vào yêu cầu.

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




-1

Nếu sử dụng cho Android gốc, hãy kiểm tra AndroidMaifest.xmltệp của bạn :

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

thay thế

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

Hy vọng nó giúp!!

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.