解析云代码发送推送通知两次

时间:2015-02-11 19:37:30

标签: javascript ios parse-platform boolean cloud-code

我正在尝试使用云代码向目标渠道发送推送通知。对象称为祷告。当有人保存Prayers时,如果Prayers中的新数据不是匿名的,那么它应该向某些频道发送推送通知。祈祷有一个关键的“匿名者”和#39;在它布尔。所以,我设置了这样的云代码,如果布尔值为false,它会发送它,但是如果它是真的,它就不会发送推送。现在的问题是它有时会在非匿名帖子上发送Push两次。

Parse.Cloud.afterSave("Prayers", function(request) {

    var firstName = request.object.get('FirstName');
    var lastName = request.object.get('LastName');
    var userId = request.object.get('UserId');
    var anonymous = request.object.get('Anonymous');
    var anonymousString = anonymous.toString

    var pushQuery = new Parse.Query(Parse.Installation);
    pushQuery.equalTo('channels', userId);
    if (anonymous == false) {
        Parse.Push.send({
            where: pushQuery, // Set our Installation query
            data: {
                alert: firstName + " " + lastName + " " + "just added a prayer request."
            }
        }, {
            success: function() {
                // Push was successful
            },
            error: function(error) {
                throw "Got an error " + error.code + " : " + error.message;
            }
        });
    }

});

2 个答案:

答案 0 :(得分:2)

乍一看,你的功能似乎没有任何问题,但是因为你总是在保存祷告后尝试发送推送通知,你确定你没有保存对象两次吗?这可能是之后两次调用afterSave的原因。

我曾遇到过的一件事是,我有两段云代码

当我试图保存它时,第一个会修改一个对象。 第二个是在保存对象后我会做一个推动。

在我在保存过程中修改对象的代码中,我保存了修改后的对象,导致我的Parse.Cloud.afterSave被同一个对象触发了两次

答案 1 :(得分:0)

服务器端

  1. 在服务器上注册设备时,通过UUID更新reg_id。
  2. 通过reg_id删除,它们在发送推送后在响应中返回canonical_id。
  3. 使用dry_run定期发送假推送,并执行与2相同的操作。
  4. 客户端

    1. 在有效负载内发送message_id,并将其保存在sqlite DB中。并且设备将知道它已经收到它。