解析iOS:向特定人员/设备发送推送通知

时间:2015-10-16 15:45:27

标签: ios parse-platform push-notification

我正在尝试向特定设备发送推送通知,但如果我发送到频道,我只能将其发送。

“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" 
 }

1 个答案:

答案 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();
});