解析云代码:您可以在推送通知中传递对象吗?

时间:2013-08-29 21:55:47

标签: javascript parsing object notifications push

我正在创建类似于Parse提供的示例代码的推送通知:

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的数据区域中,我可以发送一个完整的消息对象,其中Message是我创建的自定义类吗?如果是这样,那会是什么样的?

3 个答案:

答案 0 :(得分:1)

如果您已经创建了类并保存了一个对象,那么一旦用户去检索推送通知,为什么不发送对象ID并异步查询呢?

消息对象不需要浪费空间并且只需要一个指针就可以通过push发送。

我正在实施类似的东西,这是我打算使用的路线。

答案 1 :(得分:1)

您可以以JSON / XML格式序列化对象,然后在收到推送通知时对其进行反序列化。

答案 2 :(得分:0)

您无法直接发送对象。你会得到一个例外(几天前我遇到了这个问题,但没有写下异常的名称)。到目前为止,最好的答案是BrentonGray88。

我假设你没有使用Android,因为你包含了徽章:“增量”值,但我就是这样做的:

要发送通知的Android代码:

确保评论对象对发送评论的用户有pointer (_User) column。创建评论时,请在Android代码中加入user.put("commentAuthor", ParseUser.getCurrentUser());,以便始终可以访问创建评论的用户。

现在您需要查询Comment以将其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,但这就是我的方式。祝你好运! :)