Ios 后台提取在实际设备上不起作用
请帮忙提建议。出于某种原因,在真正的iOS设备上进行后台提取不起作用。当运行Xcode(Ios 后台提取在实际设备上不起作用,ios,swift,ios-background-mode,Ios,Swift,Ios Background Mode,请帮忙提建议。出于某种原因,在真正的iOS设备上进行后台提取不起作用。当运行Xcode(Debug->Sumulate Background Fetch)时,一切正常。但是,当我在真实设备上安装应用程序时,此功能不起作用 我将澄清以下几点: 我不会终止应用程序,只是将其最小化 Background App Refresh设置在应用程序的设置和整个手机的设置中均已启用 我等了一天多,什么也没发生 在我看来,原因是什么: 我通过TestFlight在iPhone上运行该应用程序 iPhone上没有安
Debug->Sumulate Background Fetch
)时,一切正常。但是,当我在真实设备上安装应用程序时,此功能不起作用
我将澄清以下几点:
Background App Refresh
设置在应用程序的设置和整个手机的设置中均已启用TestFlight
在iPhone上运行该应用程序AppDelegate
文件的标准名称更改为BaseDelegate
,其位置从MyApp/MyApp/AppDelegate.swift
更改为MyApp/MyApp/base/BaseDelegate.swift
(该应用程序已正确配置此文件的新名称和位置)。
它能以某种方式影响吗后台提取
模式info.plist
为了测试这个应用程序,我发送了一个本地通知,还用UserDefaults节省了时间。一大堆问题:1。您可以再次检查以确保SIM卡的缺失没有将此设置为除
.available
之外的其他设置。也许可以使用选项登录didfishlaunchingwithoptions
,这将确保您的应用程序代理正在被调用,并且状态与您认为的状态相同。2.我假设设备已连接到电源和wifi?3。我假设只有在异步网络活动完成后才调用完成处理程序?您的代码片段看起来就像是您立即调用它(一旦您在没有实际执行网络请求的情况下调用了一次,您的应用程序将不再参与后台提取)。4.我想你真的请求了某个地方的本地通知吗?@Rob,谢谢你的回答。我的评论:1。感谢您的建议,请查看ui背景刷新状态
。结果一出来,我就写在这里。2.是,设备已连接到充电和Wi-Fi。3.是的,在向网络发出异步请求后调用完成处理程序。4.是的,我有权发送通知。通知发送正确。@Rob用UIBackgroundRefreshStatus
检查了理论。因此,我总是获得可用的。代码中没有问题,但在实际设备上,后台提取
仍然不起作用。第二天和第三天已经过去了……似乎唯一可能导致这种情况的原因是应用程序正在通过TestFlight
进行测试。
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
</array>
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
}
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
var message = UserDefaults.standard.string(forKey: "fetch") ?? "nil"
message = "\(message) | \(Helper.getStringFromDate(Helper.getCurrentDate()))"
UserDefaults.standard.set(message, forKey: "fetch")
// Sending local notification ...
// Receiving data from the server ...
completionHandler(.newData)
}