我找不到Parse.Push
中使用的Parse Cloud Code
的任何文档。我看到的用例就是这样......
// Send the push notification to results of the query
Parse.Push.send({
where: pushQuery,
data: {
alert: message
}
}).then(function() {
response.success("Push was sent successfully.")
}, function(error) {
response.error("Push failed to send with error: " + error.message);
});
我要做的是,如果收件人用户设置了通知(即具有与其用户关联的有效安装实例),则发送推送通知。
目前我创建了查询并使用pushQuery将其传递到上面。我注意到在Parse仪表板中创建了Push,但发送的Pushes为0.
如果用户存在,我真的只想创建Push。我创建了查询,可以运行它并返回,如果我得到结果或不是这样...
Parse.Cloud.define("sendTurnNotificationToUser", function(request, response) {
var senderUser = request.user;
var recipientUserId = request.params.recipientId;
var message = request.params.message;
// Validate the message text.
// For example make sure it is under 140 characters
if (message.length > 140) {
// Truncate and add a ...
message = message.substring(0, 137) + "...";
}
// Send the push.
// Find devices associated with the recipient user
var recipientUser = new Parse.User();
recipientUser.id = recipientUserId;
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.equalTo("user", recipientUser);
pushQuery.find({
success: function(results) {
response.success("push user lookup was ok");
response.success(results);
},
error: function() {
response.error("push user lookup failed");
}
});
我可以将Parse.Push.send调用添加到查询的成功。但是Parse.Push.send
有一个where
条款,我不知道那里需要什么?我不想两次运行查询。
答案 0 :(得分:1)
你走在正确的轨道上。推送"高级定位"允许应用程序推送到查询产生的安装。那是where子句的用途......
// don't run find on the pushQuery. set it up as you have it
// then, assuming it returns some installation(s)...
Parse.Push.send({ where: pushQuery, data: "hello" }).then(function(result) {
response.success(result);
}, function(error) {
response.error(error);
});
顺便提一下,您可以在Parse.User上使用createWithoutData
作为快捷方式......
var recipient = Parse.User.createWithoutData(request.params.recipientId);
但你所拥有的更长的形式也应该有效。
答案 1 :(得分:0)
好像你可能会过度思考这个问题。向0安装发送推送通知没有坏处,因为推送查询与任何收件人都不匹配。我不会过分担心这一点,我也不会在你的代码中添加这样的预先检查。它会给代码添加不必要的延迟,当然会导致查询运行两次。
如果你想要这样做 - 也许你希望保持你的推送日志没有混乱 - 你确实可以查询安装类来检查查询是否匹配一组安装,如果是,然后,您可以将同一个查询传递给Parse.Push.send()
。
是的,这将导致查询运行两次,但这是预期的,因为您无法在不运行查询的情况下知道将匹配多少个对象。