2015-02-11 101 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。設備會知道它已收到或不收到。