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

Parse Cloud Code Sending Push Notification Twice

我正在尝试使用云代码向目标频道发送推送通知。该对象称为祈祷。当有人保存祈祷时,如果祈祷中的新数据不是匿名的,它应该向某些频道发送推送通知。 Prayers 中有一个 'Anonymous' 键,它是布尔值。所以,我有这样设置的云代码,如果布尔值是 false,它会发送它,但如果它是 true,它不会发送推送。现在的问题是它有时会在非匿名 post 上发送 2 次推送。

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;
            }
        });
    }

});

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

我曾经 运行 做过的一件事是,我有 2 段云代码

第一个会在我尝试保存对象时修改它。 第二个是我会在保存对象后进行推送。

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

服务器端

  1. 在服务器上注册设备时通过 UUID 更新 reg_id。
  2. 删除reg_id发送推送后在响应中有return一个canonical_id。
  3. 定期使用 dry_run 发送虚假推送并执行与 2.
  4. 相同的操作

客户端

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