我正在测试带有content-available=1的推送通知,但除非在Wi-Fi上,否则似乎无法将其发送到应用程序后台。
在推送通知处理程序的开头,我有一个简单的日志语句:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler {
NSLog(@"Notification received: %@", userInfo);
completionHandler(UIBackgroundFetchResultNewData);
}
这是我的测试:
- 运行应用程序,然后按下主页按钮将应用程序放在后台。
- 发送一条内容为content-available=1的推送通知。
- 观察控制台日志。
在Wi-Fi网络下,控制台日志会显示通知。如果我进入“设置”并关闭Wi-Fi,切换到4G网络,则通知不再出现在日志中(尽管它们会从屏幕顶部滑动进入,所以我知道它们已经被传递了)。
没有崩溃日志,如果我手动点击通知,则通知会被记录。此外,如果我在Xcode中调试应用程序,则不会出现此问题。(即,如果我在Xcode中调试,则应用程序将在4G背景下接收通知)。是否有其他人遇到了这种情况?或者是我做错了什么?
编辑:具体来说,根据我的测试,如果以下条件成立,则上述远程通知委托方法不会被调用:
- 应用程序在后台运行
- 手机连接到LTE网络,未连接Wi-Fi网络
- 应用程序未在Xcode调试器中运行
- 收到内容为content-available=1的通知
但是,如果去掉条件2(即手机连接到Wi-Fi),则处理程序将被调用。
didReceiveRemoteNotification: fetchCompletionHandler:
方法中做了什么?你在这个方法中花费的时间超过30秒了吗?你是否向完成处理程序返回了正确的值?也许这是你的LTE运营商网络的问题?我已经在后台成功测试过,尽管我需要重新启动手机才能可靠地工作。 - Paulw11