我正在尝试向特定设备发送推送通知,但如果我发送到频道,我只能将其发送。
“userQuery.countObjects”返回1个用户发现,所以我不知道出了什么问题,求助!
这是我的代码:
PFUser *user1= [friendUsers objectAtIndex:0];
// Associate the device with a user
PFInstallation *installation = [PFInstallation currentInstallation];
installation[@"user"] = [PFUser currentUser];
[installation saveInBackground];
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"fbId" equalTo:user1[@"fbId"]];
userQuery.limit = 1;
NSLog(@"cnt=%d", userQuery.countObjects);
// Find devices associated with these users
PFQuery *pushQuery = [PFInstallation query];
[pushQuery whereKey:@"user" matchesQuery:userQuery];
// Send push notification to query
PFPush *push = [[PFPush alloc] init];
[push setQuery:pushQuery]; // Set our Installation query
[push setData:data];
[push sendPushInBackground];
Parse推送仪表板显示了这一点,我删除了ID
PUSH ID
dkfo3WhNod
TARGETING
user advanced operator ($inQuery {"className"=>"_User", "limit"=>"1", "where"=>{"fbId"=>"xxxx"}})
SENDING TIME
October 16th, 2015 at 4:37 PM
EXPIRATION
None
FULL TARGET
{
"user": {
"$inQuery": {
"className": "_User",
"limit": "1",
"where": {
"fbId": "xxx"
}
}
}
}
FULL DATA
{
"alert": "Hi",
"badge": "Increment",
"sound": "hi.wav"
}
答案 0 :(得分:0)
通过将installation
个对象与其各自的用户相关联来进行定位,您已走上正轨,但我认为fbId用户查询时出现了问题。
NSLog(@"cnt=%d", userQuery.countObjects);
返回的不是因为找到了一个用户(查询从未执行过),而是因为它正在计算单个查询对象。
仔细检查用户查询是否返回您认为的内容。单独执行查询并打印出结果。
此外,您似乎已拥有用户数组friendUsers
。由于您已经拥有指针,因此无需单独的用户查询。
如果您想向阵列中的所有用户发送推送通知,请尝试以下
// Find devices associated with these users
PFQuery *pushQuery = [PFInstallation query];
[pushQuery whereKey:@"user" containedIn:friendUsers];
// Send push notification to query
PFPush *push = [[PFPush alloc] init];
[push setQuery:pushQuery]; // Set our Installation query
[push setData:data];
[push sendPushInBackground];
同样,如果您只关心第一位用户,请使用whereKey:@"user" equalTo:[friendUsers objectAtIndex:0]
作为一个有用的提示,您还希望尽可能多地将逻辑卸载到云代码中。您可以在云代码beforeSave函数
中使用以下内容,而不是建立用户关联客户端// Make sure all installations point to the current user
Parse.Cloud.beforeSave(Parse.Installation, function(request, response) {
Parse.Cloud.useMasterKey();
if (request.user) {
request.object.set('user', request.user);
} else {
request.object.unset('user');
}
response.success();
});