我们正在将我们的应用程序迁移到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以获得进一步的帮助,他们要求在这里打开一个问题。
提前感谢您的任何帮助
答案 0 :(得分:1)
目前只能使用主密钥发送推送通知。因此,唯一的方法是从云代码。 要发送推送,您需要执行以下步骤:
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