我正在创建一个使用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];只是为了调试,当我尝试发送消息时,发送者和任何其他设备都没有收到它。 (实际上没有人应该收到它,除了寄件人)。
非常感谢任何帮助。谢谢。
答案 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,但我从不使用推送通知,因此您需要尝试此代码。