向查询中的所有用户发送推送通知

时间:2014-12-29 13:52:37

标签: ios objective-c parse-platform push-notification

我正在创建一个使用Parse云的应用。我正在尝试从用户向所有其他人发送消息。在文本字段中写入消息并按下send后,委托调用以下方法并按下图所示处理推送:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
//hide keyboard
[textField resignFirstResponder];

NSString *message = self.broadcastText.text;

//create a user query
PFQuery *query = [PFUser query];
PFUser *current = [PFUser currentUser];
NSString *currentUsername = current[@"username"];
[query whereKey:@"username" notEqualTo:currentUsername];

//send push in background
PFPush *push = [[PFPush alloc] init];
[push setQuery:query];
[push setMessage:message];
[push sendPushInBackground];

//clear text field
textField.text = @"";

return YES;}

当我发送消息时,发送者(在本例中为我)也正在接收推送通知。我尝试做的是获取当前用户的用户名,然后创建一个用户查询,查询用户名不等于当前用户用户名的所有用户。

但是,它不起作用,邮件也被发送给包括发件人在内的所有用户。

注意:我也尝试使用[query whereKey:@“username”notEqualTo:currentUsername];只是为了调试,当我尝试发送消息时,发送者和任何其他设备都没有收到它。 (实际上没有人应该收到它,除了寄件人)。

非常感谢任何帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

您的问题是PFPush无法进行任何查询,需要PFInstallation查询。当您为每个用户存储PFInstallation时,您可以添加指向当前用户的字段,例如:

PFInstallation *currentInstallation = [PFInstallation currentInstallation];
currentInstallation[@"user"] = [PFUser currentUser];
[currentInstallation saveInBackground];

然后,执行如下安装查询:

PFQuery *installationQuery = [PFInstallation query];
PFUser *current = [PFUser currentUser];
[installationQuery whereKey:@"user" notEqualTo:current];

然后,使用此查询继续推送:

PFPush *push = [[PFPush alloc] init];
[push setQuery:installationQuery]; // <<< Notice query change here
[push setMessage:message];
[push sendPushInBackground];

答案 1 :(得分:0)

理论上,您向所有订阅某个频道的用户发送推送通知。 现在您有一个包含所有用户和所有频道的表格。有些用户订阅的其他用户则没有。首先为安装创建查询,而不是查找不是当前用户的用户。

PFQuery *pushQuery = [PFInstallation query];
[pushQuery whereKey:"user" notEqualTo:[PFUser currentUser]];

创建Push对象并使用此查询。

PFPush *push = [[PFPush alloc] init];
[push setQuery:pushQuery]; // Set our Installation query
[push setMessage:@"Ciao."];
[push sendPushInBackground];

在pushQuery中你可以使用其他键,例如:deviceID,installationID,deviceType等。 我使用Parse Cloud,但我从不使用推送通知,因此您需要尝试此代码。