4

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 は私が作成したカスタム クラスです。もしそうなら、それはどのように見えますか?

4

3 に答える 3

1

すでにクラスを作成してオブジェクトを保存している場合、ユーザーがプッシュ通知を取得しに行ったら、オブジェクト ID を送信して非同期に照会しないのはなぜでしょうか?

メッセージ オブジェクトはスペースを浪費する必要はなく、ポインタだけが必要なプッシュ経由で送信されます。

私は似たようなものを実装する過程にあり、これは私が使用する予定のルートです。

于 2014-08-06T12:20:01.043 に答える
1

オブジェクトを JSON/XML 形式でシリアライズし、プッシュ通知を受信したときにデシリアライズできます。

于 2015-09-27T19:51:15.090 に答える
0

オブジェクトを直接送信することはできません。例外が発生します (数日前にこの問題が発生しましたが、例外の名前を書き留めていませんでした)。これまでのところ、最良の答えは BrentonGray88 によるものです。

Badge: "Increment" 値が含まれているため、Android を使用していないと思いますが、これは私が行う方法です。

通知を送信する Android コード:

Comment オブジェクトに、pointer (_User) columnコメントを送信したユーザーへの があることを確認してください。user.put("commentAuthor", ParseUser.getCurrentUser());コメントを作成するときは、コメントを作成したユーザーにいつでもアクセスできるように、Android コードに含めます。

ここで、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 が得意ではありませんが、それが私のやり方です。頑張ってください!:)

于 2016-08-30T10:35:09.983 に答える