从Parse迁移到Nodechef时,无法通过REST api发送推送通知

时间:2016-08-11 13:14:45

标签: parse-platform parse-server

我们正在将我们的应用程序迁移到Nodechef解析服务器,并在Object Rocket上托管数据库。 虽然我们能够通过Nodechef仪表板发送推送,但我们无法像通常使用Parse那样通过REST api发送推送。

这是Nodechef仪表板发送的请求:

POST /parse/push HTTP/1.1 
Host: test-appname-1067.nodechef.com 
Connection: keep-alive 
Content-Length: 446 
Origin: https://dashboard.nodechef.com 
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N)     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile    Safari/537.36 
Content-Type: text/plain 
Accept: / 
Referer: https://dashboard.nodechef.com/apps/test-appname/push/new 
Accept-Encoding: gzip, deflate, br 
Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4 
{"where": {"deviceType":{"$in":["ios"]}},"data":{"alert":"Text of the alert","category":"category of the alert","title":"Title of the alert","u":"2b30Yuh"},"_ApplicationId":"applicationid","_ClientVersion":"js1.6.14","_MasterKey":"masterkey","_InstallationId":"56205783-4f18-7427-919a-6e03ed80443a"}

这是我们要发送的请求(与Parse使用的结构相同):

curl -X POST \
-H "X-Parse-Application-Id: applicationid" \
-H "X-Parse-Master-Key: masterkey" \
-H "Content-Type: application/json" \
-d 
{"where": {"deviceType":{"$in":["ios"]}},"data": "{\"alert\":\"Text of the alert\", \"category\": \"category of the alert\", \"title\": \"Title of the alert\", \"u\": \"2b30Yuh\"}"
} \
https://test-appname-1067.nodechef.com/parse/push

尝试此卷曲时我们没有得到任何错误(结果:true),但根本没有发送推送。

我们注意到这两个请求之间存在一些差异,因此我们尝试重现通过仪表板发送的相同请求,但仍然无法发送任何内容:

我们更改了标题中的内容类型 我们指定了正文中的各种键而不是标题 我们指定“安装ID”我们不知道它是什么

我们看到的唯一其他差异是Nodechef仪表板使用Parse SDK for javascript,而我们使用的是php SDK,但老实说,我们认为这可能不是REST api请求失败的原因

已经向Nodechef打开了一个问题,他们无法帮助并建议在github上发布解析服务器repo以获得进一步的帮助,他们要求在这里打开一个问题。

提前感谢您的任何帮助

1 个答案:

答案 0 :(得分:1)

目前只能使用主密钥发送推送通知。因此,唯一的方法是从云代码。 要发送推送,您需要执行以下步骤:

  1. 创建云代码功能(让我们称之为 sendPush
  2. 云代码功能可以接收参数,因此您可以发送任何您喜欢的参数,以便在发送推送之前了解云代码中究竟需要做什么。例如:您要向哪些用户发送,或向哪个频道等发送
  3. 您需要将 useMasterKey 添加到发送推送的位置,以便最后您的代码应如下所示:
  4. 
    
    Parse.Cloud.define("sendPush", function(request, response) {
    
      // You can get parameters in here... You can access to specific parameter like this: 
      // request.params.{PARAM_NAME}
    
      // build the query for the push notification 
      // the query can be built by your parameters (e.g. to which userId or channel id etc.)
      var query = new Parse.Query(Parse.Installation);
      query.exists("deviceToken");
    
      // this is the push payload 
      var payload = {
        alert: "after save push",
        sound: "default"
          // ... add more here if required 
      };
    
      Parse.Push.send({
          data: payload,
          where: query
        }, {
          useMasterKey: true
        }) // useMasterKey is required currently 
        .then(function() {
          response.success("Push Sent!");
        }, function(error) {
          response.error("Error while trying to send push " + error.message);
        });
    });
    
    
    

    有关云代码以及如何使用它的更多信息,请访问here