iOS计时器在后台

我想在我的iOS应用程序启动一个计时器,当应用程序在后台运行,当应用程序closures。 定时器必须每隔30分钟检查一次新的通知。 在计时器function中,他们每30分钟调用另一个函数showNotification()。

我该如何做这个计时器,以及在应用程序未在后台运行/运行时,我必须在哪个位置调用计时器。

当应用程序不在前台时,不可能做到100%的确定性。 您可以使用后台提取周期性地唤醒,但无法控制何时发生。

虽然有一些技术性的解决方法,甚至可能还有一些黑客解决scheme(在后台播放无声audio),但听起来像您的问题可以解决,而无需使用定时器和后台获取。

只需实现远程通知 。 当你的iOS收到你的应用程序的通知,它会唤醒应用程序,让它处理一段时间。 然后,您可以控制向用户显示哪些通知,也可以在后台加载一些数据。

广义而言,您需要:

  • 在应用程序启动时注册远程通知(通常在应用程序中:didFinishLaunching 🙂
  • 当您收到通知令牌时,将其发送给将向您发送通知的Web服务器(此令牌可能会更改,因此,请务必在启动应用程序时将其保存到Web服务器)
  • 当新的内容可用时,您的Web服务器可以使用令牌向应用程序发送一个有效内容(您select的语言可能已经有了一个库,例如,如果您使用Ruby,则有休斯顿 )

AFAIK没有办法在后台运行NSTimer(在制作过程中)。

编辑:如果您启用后台模式,您可以得到最多10分钟。 你可以学习更多,例如。 这里 。

Write this both methos in your Appdelegate.m file //For Objective c - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self TimerMethod]; } -(void)TimerMethod { //Every 30 minute call the functions _timer=[NSTimer scheduledTimerWithTimeInterval:1800.0f target:self selector:@selector(updateMethod:) userInfo:nil repeats:YES]; } - (void)updateMethod:(NSTimer *)theTimer { NSLog(@"Timer set now"); } //For Swift func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool { self.TimerMethod() } func TimerMethod() { var timer = NSTimer.scheduledTimerWithTimeInterval(1800, target: self, selector: "updateMethod", userInfo: nil, repeats: true) } func updateMethod() { print("set timer now") }