我正在使用Parse的推送框架实现推送通知。我将应用程序委托中的所有内容设置为Parse指示。我知道它正在工作,因为当我运行示例代码Parse提供时,推送通知正常工作(当我在didReceiveRemoteNotification
中放置一个断点时,我可以看到它被调用了。)
PFQuery* pushQuery = [PFUser query];
[pushQuery whereKey:@"deviceType" equalTo:@"ios"];
// Send push notification to query
[PFPush sendPushMessageToQueryInBackground:pushQuery
withMessage:@"Hello World!"];
当我在我的应用程序中运行上述代码时(按下测试按钮),我立即收到一条“Hello World”的通知。所以后端工作正常,我能够接收通知。
这是我最终想要运行的代码:
PFQuery* usersQuery = [PFUser query];
PFQuery* pushQuery = [usersQuery whereKey:@"joinedIDsAr" containsAllObjectsInArray:[[NSArray alloc] initWithObjects:myID, nil]]; //get all users who subscribed to my broadcast
//NSArray* usersAr = [pushQuery findObjects];
[PFPush sendPushMessageToQueryInBackground:pushQuery
withMessage:[NSString stringWithFormat:@"%@ has a new message for you to share!", myDisplayName]
block:^(BOOL succeeded, NSError * __nullable error)
{
if(succeeded)
{
NSLog(@"Success!");
}
else
{
NSLog(@"ShareScheduleVC::sendSharePushNotif: error: %@", error);
}
}];
当上面的代码执行时,我得到成功消息(并且错误总是为零)。但是didReceiveRemoteNotification
中的断点不命中,我没有收到推送通知。带有usersAr
的注释掉的行是我尝试测试查询是否正在检索正确的对象;是的,我的PFUser对象被退回了。所以问题不是空查询。
据我所知,初始测试代码和上面的代码之间进行了很多更改,因此我使用了Parse的示例代码,只更改了一行和消息文本:
PFQuery* usersQuery = [PFUser query];
PFQuery* pushQuery = [usersQuery whereKey:@"joinedIDsAr" containsAllObjectsInArray:[[NSArray alloc] initWithObjects:myID, nil]]; //get all users who subscribed to my broadcast
// Send push notification to query
[PFPush sendPushMessageToQueryInBackground:pushQuery
withMessage:[NSString stringWithFormat:@"%@ has a new message for you to share!", myDisplayName]];
我得到同样的问题; didReceiveRemoteNotification
未被调用,我可以确认我的查询包含我的PFUser对象,但我没有收到任何通知。
我把头发拉出来......还有其他人有这个问题吗?或者可以发现我犯过的一个明显的错误?任何线索从哪里开始将不胜感激。所有这一切都在我创建推送通知后立即发生,而我的应用程序正在运行...没有在后台运行的问题,我还没有那么远!我只是希望能够发送自定义通知。
(另外,我可以自由地更改消息文本而不会导致问题......当我修改查询以查找deviceType
之外的其他内容时,我遇到了问题。但我可以看到查询不是空的!我此时唯一的猜测就是我的PFUser对象没有连接到我的设备,所以即使它正在寻找我的用户帐户也无法找到我的设备。但为什么测试代码那么工作呢?