【问题标题】:why I can't use background mode in my app in swift 3?为什么我不能在 swift 3 中的应用程序中使用后台模式?
【发布时间】:2017-07-09 08:29:02
【问题描述】:

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

【问题讨论】:

  • 你想在后台做什么?您的应用程序只允许在非常特定的情况下继续在后台运行。例如,这些包括播放音频、获取位置更新或从服务器获取最新内容。
  • 我想从服务器获取最新的内容

标签: ios swift background-fetch


【解决方案1】:

您无法在后台模式下从服务器获取最新内容,因为 Apple 仅允许在特定原因下获取内容,例如。

  • 实施长时间运行的任务
  • 对于需要更多执行时间来执行的任务,您必须 请求特定权限以在后台运行它们,而无需 他们被停职。在 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
}

【讨论】:

  • @Optimus 我想与 jason 一起使用本地通知,这将在模拟器中工作但在真正的 iPhone 中我有一些问题!那么我什么时候应该在我的应用程序中使用您的代码?在应用程序委托中还是在 ViewController 中的 ViewDidLoad 中?还是我在浪费时间,我唯一的方法就是使用推送通知?
  • @SaeedRahmatolahi 您可以使用本地通知,但如果用户没有点击通知,则您无法从服务器获取数据。上面的代码可以在 appDelegate 或单例类中使用,代码可以工作,但一段时间后,请在下面找到链接stackoverflow.com/questions/28275415/…
  • @Optimus 好的,我阅读了此链接并且(我在 viewDidLoad 中使用了通知功能,因此它会自动运行)我想每分钟检查一次服务器以获取新通知,24 小时后此功能将完成!在模拟器中它会工作但在真实设备中它不再工作所以你认为我唯一的方法是使用推送通知吗?
  • 是的,您可以使用通知
  • 所以请帮帮我或者在这里写个链接来教我如何从头到尾使用推送通知
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
  • 2020-01-20
  • 2017-05-05
相关资源
最近更新 更多