在后台任务中安排通知

Posted

技术标签:

【中文标题】在后台任务中安排通知【英文标题】:Schedule notification in background task 【发布时间】:2014-11-21 16:43:15 【问题描述】:

我正在为 ios 开发一个日历/闹钟应用程序,它与网络服务器同步。在服务器上添加活动时,会发送推送通知,以便 iOS 客户端可以获取新数据,并在需要时更新和安排下一次警报的时间(本地通知)。

但这仅在应用程序在客户端打开时才有效。我希望客户端接收推送通知,如果需要,在后台重新安排下一次警报的时间。

这在 iOS 上不可能吗?

【问题讨论】:

【参考方案1】:

您可以为此使用 Background Fetch,操作系统会定期“唤醒”您的应用以在后台执行数据提取。

首先,为您的应用启用后台提取功能。在 XCode 6 中,查看您的项目,然后转到 Capabilities 选项卡,打开 Background Modes,然后检查 Background Fetch

然后你必须在 App Delegate 中实现一些代码:

application:didFinishLaunchingWithOptions:,添加:

[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

上面设置了您希望系统多久“唤醒”您的应用程序以进行理想的后台进程。请注意,最终频率由 iOS 中的算法确定,因此可能并不总是如此频繁。

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
//fetch code here
completionHandler(UIBackgroundFetchResultNewData);

以上是在这段后台进程期间调用的实际覆盖函数。记得拨打completionHandler - 不这样做可能会降低您的应用下次在后台运行的机会(或者说文档)。您可以传递给completionHandler 的枚举是UIBackgroundFetchResultNewDataUIBackgroundFetchResultNoDataUIBackgroundFetchResultFailed。根据获取的结果使用其中之一。

【讨论】:

【参考方案2】:
// use this methods in Appdeleagte
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 

    [self showAlarm:notification.alertBody];
    application.applicationIconBadgeNumber = 1;
    application.applicationIconBadgeNumber = notification.applicationIconBadgeNumber-1;


//  call this  in appdelagete
-(void)makeNotificationRequest:(UILocalNotification *)notification1

    [self showAlarm:notification1.alertBody];


// call this mathods in appdelagte
- (void)showAlarm:(NSString *)text 

**strong text**
// set notification and call this notification methods your another view ..... 
  [[NSNotificationCenter defaultCenter] postNotificationName:@"uniqueNotificationName" object:self]; //leak


【讨论】:

以上是关于在后台任务中安排通知的主要内容,如果未能解决你的问题,请参考以下文章

在android中安排后台任务并从任务中调用react-native javascript方法

在 iOS 应用程序中安排每 n 分钟运行一次的后台任务

如何在应用程序关闭时在颤动中执行后台任务?

使用应用程序时颤动后台任务

背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)

如果前台应用程序终止,如何通知后台任务?