从后台唤醒应用程序 iOS

Posted

技术标签:

【中文标题】从后台唤醒应用程序 iOS【英文标题】:Waking up app from background iOS 【发布时间】:2015-02-15 13:45:48 【问题描述】:

我正在使用静默通知从后台唤醒我的应用。当我关闭我的应用程序时一切正常,但是当我终止它(向上滑动)它停止工作。我可以感觉到(振动)静音通知已发送,但我的应用程序没有处理它。我做了一个本地通知,当静默通知到达时应该触发。在我的 .plist 中,我启用了远程通知和后台获取。在 AppDelegate.m 我有这个:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler



    UILocalNotification *notification_ = [[UILocalNotification alloc]init];

    notification_.alertBody = [NSString stringWithFormat:@"Psst!"];

    notification_.soundName = UILocalNotificationDefaultSoundName;

    [notification_ setFireDate:[NSDate dateWithTimeIntervalSinceNow:2]];

    [notification_ setTimeZone:[NSTimeZone defaultTimeZone]];

    [application setScheduledLocalNotifications:[NSArray arrayWithObject:notification_]];


【问题讨论】:

【参考方案1】:

application:didReceiveRemoteNotification 仅在您的应用程序实际在前台和后台运行时执行。这就是为什么在您终止应用程序后不会调用上述方法的原因。

当您的应用未运行并从通知中打开时,应改为在application:didFinishLaunchingWithOptions 中处理通知。 launchOptions 字典应包含键 UIApplicationLaunchOptionsRemoteNotificationKey,它指的是通知负载。

有关更多信息,请查看Local and Remote Notification Programming Guide 的“处理本地和远程通知”部分

【讨论】:

我需要提供静默推送以每天在后台运行一次我的应用程序,现在我有点困惑。要在应用程序终止时完成此操作,我需要在 application:didFinishLaunchingWithOptions 中使用 UIApplicationLaunchOptionsRemoteNotificationKey? 对不起,我没有注意到那里的静音部分。尽管如此,AFAIK 静默通知只是将content-available 作为其有效负载一部分的通知。在application:didFinishLaunchingWithOptions 中处理它并没有那么大的意义。 应用终止时如何处理静默推送? 显然,当应用程序终止时,您无法处理静默通知。更深入的解释见this answer。 所以没有办法在后台唤醒我的应用程序?

以上是关于从后台唤醒应用程序 iOS的主要内容,如果未能解决你的问题,请参考以下文章

推送以唤醒后台 iOS 8 应用程序未获取任何数据

Phonegap 每 5 分钟在后台唤醒应用程序以检查位置 iOS

为啥我在 iOS 13 中的应用程序在被用户终止时通过静默推送在后台唤醒

Xamarin Forms iOS 在唤醒时冻结

应用从后台唤醒时如何触发事件?

iOS - 连接任何蓝牙设备时唤醒应用程序