Tôi đang cố gắng gửi thông báo cho tất cả người dùng ứng dụng (trên Android), về cơ bản là sao chép những gì sẽ xảy ra khi thông báo được gửi qua bảng điều khiển dành cho quản trị viên Firebase. Đây là lệnh CURL mà tôi bắt đầu:
curl --insecure --header "Authorization: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type: application / json" -d "{\" notification \ ": {\" title \ ": \" ghi chú -Title \ ", \" body \ ": \" note-Body \ "}}" https://fcm.googleapis.com/fcm/send
Đây là JSON đã phân tích cú pháp để bạn dễ nhìn hơn:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
Câu trả lời quay lại chỉ là hai ký tự:
đến
Vậy đó, từ "to". (Tiêu đề báo cáo là 400) Tôi nghi ngờ điều này liên quan đến việc không có "to" trong JSON của tôi. Người ta thậm chí sẽ đặt gì cho một "to"? Tôi không có chủ đề nào được xác định và các thiết bị cũng chưa đăng ký bản thân cho bất cứ thứ gì. Tuy nhiên, họ vẫn có thể nhận được thông báo từ bảng điều khiển quản trị Firebase.
Tôi muốn dùng thử gói JSON "chỉ dữ liệu" do giới hạn đáng kinh ngạc của việc xử lý thông báo Firebase, theo đó nếu ứng dụng của bạn ở nền trước, thì thông báo sẽ được xử lý bởi trình xử lý của BẠN, nhưng nếu ứng dụng của bạn ở chế độ nền, nó sẽ được dịch vụ Firebase xử lý NỘI BỘ và không bao giờ được chuyển đến trình xử lý thông báo của bạn. RIÊNG, điều này có thể được giải quyết nếu bạn gửi yêu cầu thông báo của mình qua API, nhưng CHỈ nếu bạn làm điều đó chỉ với dữ liệu. (Điều này sau đó phá vỡ khả năng xử lý iOS và Android với cùng một thông báo.) Thay thế "thông báo" bằng "dữ liệu" trong bất kỳ JSON nào của tôi không có tác dụng.
Ok, sau đó tôi đã thử giải pháp ở đây: Firebase Java Server để gửi thông báo đẩy tới tất cả các thiết bị mà dường như tôi nói "Ok, mặc dù có thể thông báo cho mọi người qua Bảng điều khiển dành cho quản trị viên ... nhưng không thực sự có thể thông qua API. " Cách giải quyết là yêu cầu mỗi khách hàng đăng ký một chủ đề, sau đó gửi thông báo đến chủ đề đó. Vì vậy, đầu tiên mã trong onCreate:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
thì JSON mới mà tôi gửi:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
Vì vậy, bây giờ tôi nhận được phản hồi thực sự từ máy chủ. Phản hồi JSON:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
Và điều đó đi kèm với mã HTTP 200. Được rồi ... theo https://firebase.google.com/docs/cloud-messaging/http-server-ref, mã 200 với "InvalidRegistration" có nghĩa là có vấn đề với mã thông báo đăng ký . Có lẽ? Vì phần tài liệu đó dành cho máy chủ nhắn tin. Máy chủ thông báo có giống nhau không? Không rõ. Tôi thấy ở những nơi khác rằng chủ đề có thể mất hàng giờ trước khi nó hoạt động. Có vẻ như điều đó sẽ làm cho việc tạo phòng trò chuyện mới trở nên vô ích, vì vậy điều đó dường như cũng không còn nữa.
Tôi khá hào hứng khi có thể viết mã một ứng dụng từ đầu để nhận thông báo chỉ sau vài giờ khi tôi chưa bao giờ sử dụng Firebase trước đây. Có vẻ như nó còn phải trải qua một chặng đường dài trước khi đạt đến cấp độ của tài liệu Stripe.com.
Điểm mấu chốt: có ai biết JSON cần cung cấp để gửi thông báo tới tất cả các thiết bị chạy ứng dụng phản ánh chức năng Bảng điều khiển dành cho quản trị viên không?
FirebaseInstanceIdService