如何使用iOS后台模式?

时间:2015-12-17 06:23:03

标签: ios iphone swift background swift2

我想使用swift 2.2创建类似于WhatsApp和Viber(可能是Skype)的应用程序,适用于从iOS 8.4开始的iPhone。所以我需要每隔30秒向我的服务器发送一次https请求(我正在使用`NSURLSession),以显示我的应用程序在线,其他联系人可以看到它。如果应用程序处于活动状态,则计时器工作正常并且每30秒就没有问题。但我需要应用程序也可以在非活动,后台,暂停和未运行(如果可能的话)模式下工作,即使iPhone正在睡眠。我只需要发送一点信号,就是这样。 我已经有了这段代码:

func registerBackgroundTask() {
    backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler {
        [unowned self] in self.endBackgroundTask()
    }
    assert(backgroundTask != UIBackgroundTaskInvalid)
}

func endBackgroundTask() {
    UIApplication.sharedApplication().endBackgroundTask(backgroundTask)
    backgroundTask = UIBackgroundTaskInvalid
}

func reinstateBackgroundTask() {
    if backgroundTask == UIBackgroundTaskInvalid {
        registerBackgroundTask()
    }
}

func functionToPerformOnBackground() {
    requestToServer()
}

此函数由AppDelegate.swift中的计时器调用,如下所示:

func applicationDidEnterBackground(application: UIApplication) {

    //START BACKGROUND TIMER!!!
    if !timerForBackgroundRunning {
        timerForBackground = NSTimer.scheduledTimerWithTimeInterval(20, target: self, selector: "functionToPerformOnBackground", userInfo: nil, repeats: true)
        registerBackgroundTask()
        timerForBackgroundRunning = true            
    }
}

func applicationDidBecomeActive(application: UIApplication) {
    if timerForBackgroundRunning {
        timerForBackground.invalidate()
        if backgroundTask != UIBackgroundTaskInvalid {
            endBackgroundTask()
        }
        timerForBackgroundRunning = false
    }
}

此代码运行正常,但当iPhone进入休眠状态时,它会停止发送请求。为了再次强制代码工作,我必须再次进入应用程序然后按iPhone上的主页按钮。我测试了Viber和WhatsApp,我可以说Whatsapp工作方式类似,但Viber知道如何解决这个问题。 请问有人可以帮助我吗? 我会感谢任何帮助,建议或任何事情。 附:我已经看过这个教程:http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial 是伟大但不完整。

0 个答案:

没有答案