cordova - 我应该在Firebase Cloud Messaging中为授权 key 指定什么

标签 cordova https firebase firebase-cloud-messaging firebase-notifications

你们可以帮助我(以及其他与我一样沮丧的人)来了解Google Firebase的工作方式吗?该文档太困惑了,以至于让我觉得自己是个白痴。

这是东西。我只是想向我的Cordova应用程序的用户发送推送消息,通知他们有关更新或其他内容的信息。在过去的好时光(可能是几个星期之前),它简称为“推送消息”。现在有了Firebase,他们更改并重命名了所有内容。我想我现在需要的是通知,但是还有云消息传递,我真的看不出确切的区别是什么。

然后是术语的完全困惑。显然,有一个https API可以发送通知,但是记录不充分。有两个站点对此进行了解释,但是它们似乎在术语上没有达成共识。有些人提到“API key ”,其他人提到“身份验证 key ”,Google本身称之为“授权 key ”,但是当我在控制台上查看项目设置时,会看到“服务器 key ”和“应用程序ID” google_services.json文件包含“private_key_id”。因此,有大量的WTF。

有人可以弄清楚我在这里应该提供什么吗?这是对Firebase API制定POST请求的方式:

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

什么是“授权”?如果我想将通知发送给所有用户,那么“to”值将如何处理;如果我要针对特定​​的组,该怎么办? (对于初学者,如果它简单地到达每个设备,我会很高兴。)是否有关于这些参数的良好文档?

此外,貌似Google假设每个人都使用Java并仅提供Java示例。至少我还没有找到可用于PHP,Node.js或纯JavaScript的任何东西。我不需要的所有功能都有很多示例。

更新:我刚刚发现“授权”应该是在项目的“云消息”选项卡下的Firebase控制台上找到的“服务器 key ”。 (很好的事情是,它们并没有隐藏太多。)但是,如果我使用cURL从PHP发送POST,它将返回一个空响应,其HTTP代码为0。

最佳答案

好吧,我自己弄清楚了,现在觉得自己有点白痴了。希望一些仍在使用的人会发现它有用。

“授权”值应为在项目的“云消息传递”选项卡下的Firebase控制台上找到的“服务器 key ”。

“to”参数是必需的。如果省略,服务器将以简单的“to”响应。无论如何,它以漂亮的JSON响应。

如果要向所有设备发送消息,则应指定:

"to": "/topics/all"

成功的话,服务器响应就是这样:
{"message_id":4988221490411655075}

出现任何错误时的外观如下:
{"multicast_id":5691752204334485119,
 "success":0,
 "failure":1,
 "canonical_ids":0,
 "results":[{
               "error":"MissingRegistration"
            }]
}

参数和返回值在这里说明:

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

Firebase控制台仅保留从控制台本身发送的消息。

对于Cordova,我正在使用这个简单的插件,它可以正常工作:

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

这是一个格式良好的JSON请求,将在PHP中使用cURL发送(也包括在内):
$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);

关于cordova - 我应该在Firebase Cloud Messaging中为授权 key 指定什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38154263/

相关文章:

xcode - 如何在 iOS AdHoc 构建上调试 Firebase

c# - 如何在带有 Firebase 的 Unity 中使用异步

javascript - phonegap 应用程序上的糖果聊天

iphone - 在 iOS 中,如何使用服务器上带有自签名证书的 https 连接到服务器?

java - Android 中使用 PhoneGap 的异步任务

ajax - Django,使用 Ajax 从 Http 页面安全登录

安卓8 : Cleartext HTTP traffic not permitted

javascript - 使用 JavaScript 在 Firebase 中查找和修改(或删除)匹配节点的精确语法

jquery - PhoneGap getJSON 调用 REST 服务不起作用

javascript - navigator.contacts.find 不工作(cordova/phonegap)