2013-08-29 69 views
4

我創建類似於由解析提供此示例代碼的推送通知:解析雲代碼:您是否可以在推送通知中傳遞對象?

Parse.Cloud.afterSave('Activity', function(request) { 

    if (request.object.get("type") === ("comment") { 

     var message = request.user.get('displayName') + ': '; 
     message += request.object.get('content').trim(); 

     var query = new Parse.Query(Parse.Installation); 
     query.equalTo('user', request.object.get("toUser")); 

     Parse.Push.send({ 
      where:query, 
      data: { 
       alert: message, 
       badge: 'Increment' 
      } 
     }); 
    } 
}); 

我的問題是:在Parse.Push.send的數據區,可我發送整個消息對象,其中消息是我創建的自定義類嗎?如果是這樣,那會是什麼樣子?

+0

你知道嗎?我也需要這個。謝謝! – Eddy

回答

1

如果您已經創建了類並保存了一個對象,爲什麼不只是發送對象ID並在用戶檢索推送通知後異步查詢它?

消息對象不需要浪費空間並通過推送發送,只需要一個指針即可。

我正在實施類似的過程,這是我打算使用的路線。

1

您可以使用JSON/XML格式序列化對象,然後在收到推送通知時將其反序列化。

0

您無法直接發送對象。你會得到一個異常(前幾天我有這個問題,但沒有寫下異常的名字)。最好的答案是BrentonGray88。

我,因爲你包括徽章你不使用Android的假設:「增量」的值,但是這是我會怎麼做:

Android的代碼來發送通知:

確保評論對象對發送評論的用戶有pointer (_User) column。當您創建評論時,請在您的Android代碼中包含user.put("commentAuthor", ParseUser.getCurrentUser());,以便您始終可以訪問創建評論的用戶。

現在您需要查詢註釋以將其objectId發送到推送通知。

ParseQuery<ParseObject> query = new ParseQuery<>("Comment"); 
query.whereEqualTo("objectId", I AM NOT SURE WHAT CONDITION YOU WANT HERE); 
query.findInBackground((comment, e) -> { 
    if (e == null) for (ParseObject commentObject: comment) { 

     String recipientObjectId = commentObject.getParseObject("commentAuthor").getObjectId(); 

     final Map<String, Object> params = new HashMap<>(); 
     // This is to send the notification to the author of the Comment 
     params.put("recipientObjectId", recipientObjectId); 

     // This is so we can use values from the Comment in the notification 
     params.put("commentObjectId", commentObject.getObjectId()); 

     // This is a required lined 
     params.put("useMasterKey", true); 

     ParseCloud.callFunctionInBackground("pushMessage", params, new FunctionCallback<String>() { 
      public void done(String result, ParseException e) { 
       if (e == null) { 
        Log.d(getClass().toString(), "ANNOUNCEMENT SUCCESS"); 
       } else { 
        System.out.println(e); 
        Log.d(getClass().toString(), "ANNOUNCEMENT FAILURE"); 
       } 
      } 
     }); 

    } 
}); 

現在在你的Cloude代碼查詢:

Parse.Cloud.define("pushMessage", function (request, response) { 
     // Again, we are sending the notification to the author of the Comment 
     var pushQuery = new Parse.Query(Parse.Installation); 
     pushQuery.equalTo('user', request.params.get("recipientObjectId")); 

     // We retrieve information from the Comment created by that author 
     var commentQuery = new Parse.Query(Parse.Comment); 
     commentQuery.equalTo('objectId', request.params.commentObjectId); 

     commentQuery.get("commentObjectId", { 
      success: function(userObject) { 
       var displayName = userObject.get("displayName"); 
       var content = userObject.get("content"); 

       var message = displayName + ': '; 
       message += content.trim(); 

       Parse.Push.send({ 
       where: pushQuery, 
       data: { 
        alert: message 
       }, 
       }, { 
        useMasterKey: true, 
        success: function() { 
         response.success("Success!"); 
       }, 
       error: function (error) { 
        response.error("Error! " + error.message); 
       } 
      }); 

       console.log(); 
      }, 
      error: function(error) { 
       console.log("An error occured :("); 
      } 
     }); 

    }); 

對不起,我不是最好的JavaScript,但那是一種我怎麼會做它。祝你好運! :)