我正在创建类似于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是我创建的自定义类吗?如果是这样,那会是什么样的?
答案 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,但这就是我的方式。祝你好运! :)