我想使用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 是伟大但不完整。