后台获取在模拟器中工作但在真实设备中不工作

Posted

技术标签:

【中文标题】后台获取在模拟器中工作但在真实设备中不工作【英文标题】:Background fetch working in simulator but not working in real device 【发布时间】:2020-05-04 15:44:29 【问题描述】:

我正在调用 API 来获取数据并根据 API 的响应显示本地推送,因此我使用的是 Apple 的 background fetch 服务,该服务在 ios 13 及以上版本中引入。

但是当尝试在模拟器中测试这个场景并且它工作正常但是当我在真实设备中检查这个应用程序时它没有工作并且当它试图在后台调用 api 时失去连接。

我并没有从设备上杀死我的应用程序,只是通过单击主页按钮放回。

我不确定为什么它不在真实设备中运行。

到目前为止我所做的。步骤在这里:

    我已启用应用项目功能的后台获取。

    然后我在AppDelegate中添加了这段代码

    extension AppDelegate 
    
    func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
    
      print("Bg Fetch from App Delegate 1")
    
      DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) 
    
      BroadCastManager.sharedInstance.fetchNewDataWithCompletionHandler(completionHandler: completionHandler)
    
    
    
    
    

    这将从服务类调用一个方法,其中一个 API 将被调用,然后基于响应 api 它将触发一个本地推送。

所以这里的问题是,当在真实设备中调用 API 并且应用程序在后台时,我会遇到错误。

错误截图。

【问题讨论】:

@CodeBender 不适用于后台任务 API。 请编辑您的问题以显示相关代码。 @Paulw11 编辑问题并编写一些代码和步骤以获取详细信息。 那不是新的api,那是旧的api。为什么 3 秒后就派人而不是干活? 3 秒延迟不是问题,先生。这只是推送的延迟。如果我没有它,那么它也不能在设备中工作。正如我在上面的问题中提到的,它在模拟器中工作,但在真实设备中不工作。 @Paulw11 【参考方案1】:

您拥有的代码是 iOS12 及更早版本。尝试新流程。我只是在这里举了一个例子(我的应用程序的工作代码):

BGAppRefreshTask Background Task Not Executing

【讨论】:

以上是关于后台获取在模拟器中工作但在真实设备中不工作的主要内容,如果未能解决你的问题,请参考以下文章

CoreLocation 应用程序在模拟器中工作但不在设备上

MPMoviePlayer 声音在模拟器和 ipad 设备中工作,但在 iPhone 设备中不工作

与 Host App 的自定义键盘扩展通信在设备中不工作但在模拟器中工作

查询在 PHPMyAdmin 中工作但在 PHP 中不工作

Jquery 对象 innerHTML 在 Firefox 中工作但在 IE 中不工作?

向量查找函数在 Visual Studio 中工作但在 GCC 中不工作