解析云推送通知正在推送给所有用户而不是目标用户
Parse cloud push notifications are pushing to all users instead of targeted user
我无法将推送通知定位到单个用户。现在,无论哪个用户登录到我的测试设备,我的测试设备都会收到推送通知。即使当我向当前注销的 _User 发送推送并且设备使用完全不同的 _User 登录时,它也会收到推送通知。
我已经使用 parse.com 设置了云代码,以便能够向用户发送推送通知。我在安装 class 中有一个 "user" 指针指向将接收推送通知的 cooresponding _User。
示例:_用户 "Sam" 已登录到移动设备。我从 Xcode 中的 iOS 模拟器向 _User "steve" 发送了一个推送。即使 "Sam" 已登录,移动设备也会收到推送。即使没有用户登录,它也会收到推送。
当我检查 Push control on parse 时,cloud cloud 似乎正在正确查询安装中与 _User class 的 objectId 匹配的 "user" 指针,如下所示:
user advanced operator ($inQuery {"className"=>"_User", "objectId"=>"LJQXaJDzkU"})
SENDING TIME
August 5th, 2015 at 3:01 PM
EXPIRATION
None
FULL TARGET
{
"user": {
"$inQuery": {
"className": "_User",
"objectId": "LJQXaJDzkU"
}
}
}
FULL DATA
这是查询用户并从解析云发送推送的云代码。 recipientUserId 接收接收推送的 _User 的 objectId 字符串。
Parse.Cloud.define("sendPush", function(request, response) {
var senderUser = request.user
var recipientUserId = request.params.recipientId;
var senderUserId = request.params.senderId;
var message = senderUserId + " sent a message"
var recipientUser = new Parse.User();
recipientUser.id = recipientUserId;
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.matchesQuery('user', recipientUser);
Parse.Push.send ({
where: pushQuery,
data: {
aps: {
alert: message,
badge: "Increment",
sound: "cow-moo1.wav"
}
}
}, {
success: function() {
response.success("Success!");
},
error: function(error) {
response.error(error);
}
});
});
推送没有问题,我可以在设备上打开它们,但我真的不知道为什么即使被查询的用户甚至没有登录设备,推送也会被发送到设备.任何有关发生的事情的想法将不胜感激。谢谢!!!
编辑您的代码,以便在您注销时从安装中删除用户。
编辑 - 下面的评论中提到了这一点,所以我想确保在这里提到它,以防它是有效的解决方案。 OP 使用了 matchesQuery,它需要传入查询,但传入的是 Parse.User 对象。我建议他使用 equalTo 而不是 matchesQuery。
我无法将推送通知定位到单个用户。现在,无论哪个用户登录到我的测试设备,我的测试设备都会收到推送通知。即使当我向当前注销的 _User 发送推送并且设备使用完全不同的 _User 登录时,它也会收到推送通知。
我已经使用 parse.com 设置了云代码,以便能够向用户发送推送通知。我在安装 class 中有一个 "user" 指针指向将接收推送通知的 cooresponding _User。
示例:_用户 "Sam" 已登录到移动设备。我从 Xcode 中的 iOS 模拟器向 _User "steve" 发送了一个推送。即使 "Sam" 已登录,移动设备也会收到推送。即使没有用户登录,它也会收到推送。
当我检查 Push control on parse 时,cloud cloud 似乎正在正确查询安装中与 _User class 的 objectId 匹配的 "user" 指针,如下所示:
user advanced operator ($inQuery {"className"=>"_User", "objectId"=>"LJQXaJDzkU"})
SENDING TIME
August 5th, 2015 at 3:01 PM
EXPIRATION
None
FULL TARGET
{
"user": {
"$inQuery": {
"className": "_User",
"objectId": "LJQXaJDzkU"
}
}
}
FULL DATA
这是查询用户并从解析云发送推送的云代码。 recipientUserId 接收接收推送的 _User 的 objectId 字符串。
Parse.Cloud.define("sendPush", function(request, response) {
var senderUser = request.user
var recipientUserId = request.params.recipientId;
var senderUserId = request.params.senderId;
var message = senderUserId + " sent a message"
var recipientUser = new Parse.User();
recipientUser.id = recipientUserId;
var pushQuery = new Parse.Query(Parse.Installation);
pushQuery.matchesQuery('user', recipientUser);
Parse.Push.send ({
where: pushQuery,
data: {
aps: {
alert: message,
badge: "Increment",
sound: "cow-moo1.wav"
}
}
}, {
success: function() {
response.success("Success!");
},
error: function(error) {
response.error(error);
}
});
});
推送没有问题,我可以在设备上打开它们,但我真的不知道为什么即使被查询的用户甚至没有登录设备,推送也会被发送到设备.任何有关发生的事情的想法将不胜感激。谢谢!!!
编辑您的代码,以便在您注销时从安装中删除用户。
编辑 - 下面的评论中提到了这一点,所以我想确保在这里提到它,以防它是有效的解决方案。 OP 使用了 matchesQuery,它需要传入查询,但传入的是 Parse.User 对象。我建议他使用 equalTo 而不是 matchesQuery。