【问题标题】:Parse Cloud Code Sending Push Notification Twice解析两次发送推送通知的云代码
【发布时间】:2015-04-12 08:01:53
【问题描述】:

我正在尝试使用云代码向目标频道发送推送通知。该对象称为祈祷。当有人保存 Prayers 时,如果 Prayers 中的新数据不是匿名制作的,它应该向某些频道发送推送通知。 Prayers 中有一个“匿名”键,它是布尔值。所以,我有这样的云代码设置,如果布尔值为假,它会发送它,但如果它是真的,它不会发送推送。现在的问题是它有时会在非匿名帖子上发送 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;
            }
        });
    }

});

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 就是这样。我的代码让它保存了两次对象。谢谢!
    【解决方案2】:

    服务器端

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

    客户端

    1. 在payload中发送message_id,并将其保存在sqlite DB中。设备会知道它是否收到了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多