2015-02-11 54 views
0

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

}); 

回答

1

乍一看似乎有没有什么毛病你的功能,但因为你总是尝试发送推送通知祈祷已被保存后,你确定你是不是保存对象两次?这可能是afterSave被调用两次的原因。

有一个问题我也曾经跑进了的事,我有2片云代码

首先一个,当我试图挽救它会修改对象。 第二个是我会在保存对象后进行推送。

在我的代码,我在保存过程修改的对象,我救了修改的对象,这导致我Parse.Cloud.afterSave为同一对象

+0

就是这样。我的代码让它保存对象两次。谢谢! – user717452 2015-02-12 02:30:41

0

服务器端

    被解雇两次
  1. 在服务器上注册设备时,通过UUID更新reg_id。
  2. 通过reg_id进行删除,发送推后返回canonical_id。
  3. 使用dry_run定期发送假的推动和有效载荷内做同样的事情为2

客户端

  1. 发送MESSAGE_ID,并将其保存在sqlite的DB。设备会知道它已收到或不收到。