我通过content-available在推送通知上使用标志来触发后台获取.我有fetch和remote-notification UIBackgroundModes启用.
这是我在AppDelegate.m中使用的实现:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"Remote Notification Recieved");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.alertBody = @"Looks like i got a notification - fetch thingy";
[application presentLocalNotificationNow:notification];
completionHandler(UIBackgroundFetchResultNewData);
}
Run Code Online (Sandbox Code Playgroud)
当应用程序在后台运行时,它可以正常工作.(收到通知,应用程序触发"看起来像我收到通知"本地通知,因为上面的代码应该这样做).
但是,当应用程序未运行并且收到带有content-available标志的推送通知时,应用程序不会启动,并且didRecieveRemoteNotification永远不会调用委托方法.
WWDC视频最新的多任务处理(来自WWDC 2013的#204)显示了这一点:
它表示当收到带有content-available标志的推送通知时,应用程序将"启动到后台" .
为什么我的应用程序没有启动到后台?
所以真正的问题是:
用户强行退出应用后,iOS会执行后台任务吗?
push-notification apple-push-notifications ios remote-notifications silent-notification
我的问题是:当用户强制退出(滑动)应用程序时,我无法使无提示通知工作!
我想以下是一个事实:如果应用程序被用户强制退出(刷掉),静默推送(使用content-available:1)不会触发,application(_:didReceiveRemoteNotification:fetchCompletionHandler:)也不会触发任何其他方法(它不会启动应用程序)!谁能证明这是错误的?
我已确保已启用Background Mode: Remote Notifications。
但是如果非静音通知对我不起作用怎么办?我需要静默的,我需要在展示之前能够运行一些检查!如果我想在收到来自远程服务器的通知后检查是否有正确的用户登录到我的应用程序,该怎么办?(因为我不能保证当他退出时他成功地让服务器知道,所以我假设服务器不确定)
在我的情况下采取什么正确的方法?
类似的事情有很多问题,但涉及的人并不多,不知道为什么?我不相信我有这么罕见的情况。也许我解决这类问题的基本方法是错误的?在Android平台上似乎完全没有问题!
我使用 FCM 作为发送通知的中心点,所以如果你说 PushKit 可以解决我的问题,FCM 不支持 VoIP 证书太糟糕了。但是,我想知道,PushKit 真的能解决这个问题吗?或者苹果只是这样设计的,当用户强制退出一个应用程序时,这意味着这个应用程序必须完全关闭才能推送远程通知?!
我不认为这是Firebase 静默通知的副本不会启动关闭的 iOS 应用程序,因为我在这里问的是如果您想检查通知所针对的用户是否对应于用户登录到应用程序?如果事实证明在 iOS 平台上绝对没有解决方案,则可以认为是重复的。
push-notification apple-push-notifications uiapplicationdelegate ios swift