Ios 为什么我能';在swift 3中我的应用程序中不使用背景模式?

Ios 为什么我能';在swift 3中我的应用程序中不使用背景模式?,ios,swift,background-fetch,Ios,Swift,Background Fetch,我想在我的应用程序中使用后台模式,因此在功能中我勾选了后台获取和通知,但问题是,在模拟器中,一切都正常,在真正的iPhone中,应用程序将在后台冻结你无法在后台模式下从服务器获取最新内容,因为苹果只允许获取具体原因中的内容 实现长时间运行的任务 对于需要更多执行时间才能执行的任务,必须 请求特定权限以在后台运行它们,而无需 他们被停职。在iOS中,只允许特定的应用程序类型 要在后台运行,请执行以下操作: 在后台向用户播放音频内容的应用程序, 例如音乐播放器应用程序 在后台录制音频内容的应用程

我想在我的应用程序中使用后台模式,因此在功能中我勾选了后台获取和通知,但问题是,在模拟器中,一切都正常,在真正的iPhone中,应用程序将在后台冻结

你无法在后台模式下从服务器获取最新内容,因为苹果只允许获取具体原因中的内容

  • 实现长时间运行的任务
  • 对于需要更多执行时间才能执行的任务,必须 请求特定权限以在后台运行它们,而无需 他们被停职。在iOS中,只允许特定的应用程序类型 要在后台运行,请执行以下操作:

    • 在后台向用户播放音频内容的应用程序, 例如音乐播放器应用程序
    • 在后台录制音频内容的应用程序
    • 让用户随时了解其位置的应用程序,如 导航应用程序
    • 支持互联网语音协议(VoIP)的应用程序
    • 需要定期下载和处理新内容的应用程序
    • 从外部附件接收定期更新的应用程序
实现这些服务的应用程序必须声明它们支持的服务,并使用系统框架实现这些服务的相关方面。声明服务可以让系统知道您使用了哪些服务,但在某些情况下,实际上是系统框架阻止了应用程序挂起

相反,您可以在短时间内(例如1-2分钟)从服务器获取内容,具体取决于cpu使用情况

func doUpdate() {
    DispatchQueue.global(qos: .default).async(execute: {() -> Void in
        self.beginBackgroundUpdateTask()
        var response: URLResponse? = nil
        var error: Error? = nil
        let responseData: Data? = try? NSURLConnection.sendSynchronousRequest(request, returningResponse: response)
        // Do something with the result
        self.endBackgroundUpdateTask()
    })
}

func beginBackgroundUpdateTask() {
    backgroundUpdateTask = UIApplication.shared.beginBackgroundTask(withExpirationHandler: {() -> Void in
        self.endBackgroundUpdateTask()
    })
}

func endBackgroundUpdateTask() {
    UIApplication.shared.endBackgroundTask(backgroundUpdateTask)
    backgroundUpdateTask = UIBackgroundTaskInvalid
}

你想在后台做什么?您的应用程序只允许在非常特定的情况下在后台运行。例如,这些包括播放音频、获取位置更新或从服务器获取最新内容server@Optimus我想与jason一起使用本地通知,这将在模拟器中工作,但在真正的iPhone中,我遇到了一些问题!那么我什么时候应该在我的应用程序中使用你的代码?应用程序内委托还是ViewController中的ViewDidLoad?或者我在浪费时间,唯一的方法就是使用推送通知?@Saeedrahmotolahi您可以使用本地通知,但如果用户未单击通知,则无法从服务器获取数据。上面的代码可以在appDelegate或singleton类中使用,代码可以工作,但在一段时间内,请找到下面的链接@Optimus ok我阅读了此链接,并且(我在viewDidLoad中使用了通知功能,因此它将自动运行)我想每分钟检查一次服务器,以获取新的通知,24小时后此功能将完成!在模拟器中它可以工作,但在实际设备中它不再工作了,所以你认为我唯一的方法是使用推送通知吗?是的,你可以使用通知请帮助我或在这里写一个链接,教我如何从开始到最后一步使用推送通知