6

你们能帮助我(以及其他和我一样沮丧的人)了解 Google Firebase 的工作原理吗?文档是如此混乱,以至于让我觉得自己完全是个白痴。

事情就是这样。我只是想向我的 Cordova 应用程序的用户发送一条推送消息,通知他们有更新或其他信息。在过去的美好时光(可能是几周前),它被简单地称为推送消息。现在有了这个 Firebase 的东西,他们改变并重命名了所有东西。我想我现在需要的是通知,但也有云消息,我真的看不出确切的区别是什么。

然后是术语的完全混乱。显然有一个 https API 可以发送通知,但它的文档记录很差。有几个网站对此进行了解释,但他们似乎没有就术语达成共识。有些人提到了“API 密钥”,有些人提到了“身份验证密钥”,Google 本身将其称为“授权密钥”,但是当我在控制台上查看我的项目设置时,我看到了“服务器密钥”和“应用程序 ID”,而google_services.json 文件包含一个“private_key_id”。所以有大量的WTF。

有人可以澄清我应该在这里提供什么吗?这就是应如何将 POST 请求制定为 Firebase API:

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”值是什么?如果我想针对特定组怎么办?(对于初学者来说,如果它简单地到达每台设备,我会很高兴。)这些参数是否有很好的文档?

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

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

4

1 回答 1

18

好吧,我自己想通了,现在感觉不那么傻了。希望一些仍然这样做的人会发现它很有用。

“授权”值应该是在我项目的云消息选项卡下的 Firebase 控制台上找到的“服务器密钥”。

“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);
于 2016-07-01T23:06:03.583 回答