使用Cloud Code发送解析推送

时间:2016-01-11 22:59:00

标签: ios parse-platform cloud-code

我找不到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条款,我不知道那里需要什么?我不想两次运行查询。

2 个答案:

答案 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()

是的,这将导致查询运行两次,但这是预期的,因为您无法在不运行查询的情况下知道将匹配多少个对象。