6

Các bạn có thể giúp tôi (và những người khác cũng thất vọng như tôi) để Google Firebase hoạt động như thế nào không? Các tài liệu là rất khó hiểu rằng nó làm cho tôi cảm thấy hoàn toàn một thằng ngốc.Tôi nên chỉ định điều gì cho khóa Cấp phép trong Nhắn tin qua đám mây của Firebase

Đây là điều. Tôi chỉ đơn giản là cố gắng để gửi một tin nhắn push cho người dùng ứng dụng Cordova của tôi, nhận thấy chúng về một bản cập nhật hoặc một cái gì đó. Trong thời gian tốt đẹp cũ (có thể một vài tuần trước) nó chỉ đơn giản được gọi là một tin nhắn push. Bây giờ có điều Firebase này, họ đã thay đổi và đổi tên mọi thứ. Tôi đoán những gì tôi cần hiện đang được gọi là Thông báo, nhưng cũng có Cloud Messaging và tôi không thực sự thấy sự khác biệt chính xác là gì.

Sau đó, có sự nhầm lẫn hoàn toàn về thuật ngữ. Rõ ràng có một https API để gửi thông báo, nhưng nó kém tài liệu. Có một vài trang web giải thích nó, nhưng họ dường như không đạt được một sự đồng thuận về thuật ngữ. Một số đề cập đến "khóa API", một số khác là "khóa xác thực", Google tự gọi nó là "khóa ủy quyền", nhưng khi tôi xem xét cài đặt dự án trên bảng điều khiển, tôi thấy "khóa máy chủ" và "ID ứng dụng" trong khi tệp google_services.json chứa "private_key_id". Vì vậy, có một số lượng tốt của WTF.

Ai đó có thể làm rõ những gì tôi nên cung cấp ở đây? Đây là cách yêu cầu POST được xây dựng thành API Firebase:

https://fcm.googleapis.com/fcm/send 
Content-Type:application/json 
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA <-- WHAT IS THIS? 

{ "data": { 
    "score": "5x1", 
    "time": "15:10" 
}, 
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..." <-- AND THIS? 
} 

Điều gì xảy ra với "Ủy quyền"? Điều gì xảy ra với giá trị "tới" nếu tôi muốn gửi thông báo của mình tới tất cả người dùng và điều gì xảy ra nếu tôi muốn nhắm mục tiêu một nhóm cụ thể? (Đối với người mới bắt đầu, tôi sẽ rất vui nếu nó chỉ đơn giản là đến mọi thiết bị.) Có tài liệu hướng dẫn tốt cho các tham số này không?

Hơn nữa dường như Google giả định mọi người làm việc trong Java và chỉ cung cấp các ví dụ Java. Ít nhất tôi đã không tìm thấy bất cứ điều gì có thể sử dụng cho PHP, Node.js hoặc JavaScript đơn giản. Có rất nhiều ví dụ cho tất cả các chức năng tôi không cần.

CẬP NHẬT: Tôi chỉ thấy rằng "Ủy quyền" sẽ là "Khóa máy chủ" được tìm thấy trên bảng điều khiển Firebase trong tab Nhắn tin trên đám mây của dự án của tôi. Tuy nhiên, nếu tôi gửi một POST từ PHP với cURL, nó sẽ trả về một phản hồi trống với mã HTTP 0.

Trả lời

16

OK, tôi đã tự tìm ra và cảm thấy một chút bây giờ là một thằng ngốc. Hy vọng một số người vẫn làm sẽ thấy nó hữu ích.

Giá trị "Ủy quyền" phải là "Khóa máy chủ" được tìm thấy trên bảng điều khiển Firebase trong tab Nhắn tin trên đám mây của dự án của tôi.

Thông số "đến" là bắt buộc. Nếu nó bị bỏ qua, máy chủ sẽ phản hồi bằng "đơn giản". Dù sao nó phản hồi trong JSON đẹp.

Nếu bạn muốn gửi một thông điệp tới tất cả các thiết bị, bạn nên xác định:

"to": "/topics/all" 

phản ứng máy chủ duy nhất là này nếu bạn thành công:

{"message_id":4988221490411655075} 

Sau đây là cách nó trông giống như trong trường hợp có lỗi:

{"multicast_id":5691752204334485119, 
"success":0, 
"failure":1, 
"canonical_ids":0, 
"results":[{ 
       "error":"MissingRegistration" 
      }] 
} 

Các tham số và giá trị trả về được giải thích tại đây:

https://firebase.google.com/docs/cloud-messaging/http-server-ref

Bảng điều khiển Firebase chỉ giữ lại thư được gửi từ bảng điều khiển.

Đối Cordova Tôi đang sử dụng plugin này đơn giản và nó hoạt động tốt:

https://www.npmjs.com/package/cordova-plugin-fcm

Đây là một yêu cầu cũng như hình thành JSON để được gửi đi với cURL trong PHP (cũng bao gồm):

$json_data = '{ "data": { 
        "price": "1000", 
        "currency": "USD" 
       }, 
       "notification": { 
        "title": "Hey you got a message", 
        "body": "Your mother stil loves you", 
        "sound": "default", 
        "click_action": "FCM_PLUGIN_ACTIVITY", 
        "icon": "icon_name" 
       }, 
       "to": "/topics/all", 
       "priority": "high" 
       }'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
              'Content-Type: application/json',                     
              'Content-Length: '.strlen($json_data), 
              'Authorization:key=AIzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 
             ));   
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$output = curl_exec($ch); 
curl_close($ch); 
+0

bạn thưa bạn là người cứu mạng :) – Kushan

+0

Đây là một trợ giúp tuyệt vời. Cảm ơn bạn rất nhiều. Tôi có một số nghi ngờ về cách tôi nên lấy Server Key. Vì vậy, nó là một ý tưởng tốt để hardcode chìa khóa trong ứng dụng hoặc chúng ta có thể nhận được giá trị lập trình bằng cách nào đó? –

+0

Nó chỉ là một chuỗi. Bạn có thể lấy nó từ bất cứ nơi nào bạn muốn. Rõ ràng đây chỉ là một ví dụ, tôi thực sự đặt nó vào một biến toàn cầu. –

Các vấn đề liên quan