iOS 11中如何从自有App跳转至设置的后台应用刷新页面?
针对iOS 11直接跳转「后台应用刷新」设置的解决方案
嘿,刚好我之前帮朋友解决过类似的问题,针对iOS 11的情况,苹果确实有官方允许的方式直接跳转到「通用」-「后台应用刷新」这个子页面,不用只停留在设置根目录。下面给你详细说下实现步骤和注意事项:
核心思路:使用特定的URL Scheme
iOS 11及之后,苹果开放了部分设置子页面的直接跳转URL,其中对应「后台应用刷新」的路径是:App-Prefs:root=General&path=BackgroundAppRefresh
代码实现(Swift & Objective-C)
Swift版本
import UIKit func openBackgroundAppRefreshSettings() { // 构造目标设置页面的URL guard let settingsUrl = URL(string: "App-Prefs:root=General&path=BackgroundAppRefresh") else { return } // 先检查是否能打开这个URL if UIApplication.shared.canOpenURL(settingsUrl) { UIApplication.shared.open(settingsUrl, options: [:], completionHandler: { success in if !success { // 跳转失败时, fallback到设置根目录 self.fallbackToSettingsRoot() } }) } else { fallbackToSettingsRoot() } } private func fallbackToSettingsRoot() { guard let rootSettingsUrl = URL(string: UIApplication.openSettingsURLString) else { return } UIApplication.shared.open(rootSettingsUrl) }
Objective-C版本
#import <UIKit/UIKit.h> - (void)openBackgroundAppRefreshSettings { NSURL *settingsUrl = [NSURL URLWithString:@"App-Prefs:root=General&path=BackgroundAppRefresh"]; if ([[UIApplication sharedApplication] canOpenURL:settingsUrl]) { [[UIApplication sharedApplication] openURL:settingsUrl options:@{} completionHandler:^(BOOL success) { if (!success) { [self fallbackToSettingsRoot]; } }]; } else { [self fallbackToSettingsRoot]; } } - (void)fallbackToSettingsRoot { NSURL *rootSettingsUrl = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:rootSettingsUrl]; }
关键注意事项
- Info.plist配置:必须在
Info.plist中添加LSApplicationQueriesSchemes数组,并把App-Prefs作为其中一项,否则canOpenURL:会返回NO,导致跳转失败。 - 审核合理性:苹果允许这种跳转,但前提是你的App确实有合理的场景引导用户调整后台应用刷新(比如你的核心功能依赖后台刷新,而用户当前关闭了它),不要滥用跳转,否则可能被拒审。
- 版本兼容:这个URL Scheme仅在iOS 11及以上有效,如果你需要兼容更低版本,记得做系统版本判断,iOS 10及以下只能跳转到设置根目录,或者提示用户手动进入「通用」-「后台应用刷新」。
- 跳转失败处理:虽然iOS11+支持这个路径,但还是要做好失败的 fallback 逻辑,避免用户无响应。
内容的提问来源于stack exchange,提问作者Thorax
相关产品推荐
相关产品推荐

