解析云代码两次发送推送通知
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 被同一个对象触发两次
服务器端
- 在服务器上注册设备时通过 UUID 更新 reg_id。
- 删除reg_id发送推送后在响应中有return一个canonical_id。
- 定期使用 dry_run 发送虚假推送并执行与 2.
相同的操作
客户端
- 在有效负载中发送message_id,并将其保存在sqlite DB中。并且设备会知道它是否已收到它。
我正在尝试使用云代码向目标频道发送推送通知。该对象称为祈祷。当有人保存祈祷时,如果祈祷中的新数据不是匿名的,它应该向某些频道发送推送通知。 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 被同一个对象触发两次
服务器端
- 在服务器上注册设备时通过 UUID 更新 reg_id。
- 删除reg_id发送推送后在响应中有return一个canonical_id。
- 定期使用 dry_run 发送虚假推送并执行与 2. 相同的操作
客户端
- 在有效负载中发送message_id,并将其保存在sqlite DB中。并且设备会知道它是否已收到它。