iOS调用系统的设置界面

本文介绍了在iOS开发中如何引导用户跳转到系统设置界面,特别是面对iOS10及以上版本的适配问题。文中提到了两种方法:一是使用UIApplicationOpenSettingsURLString字段,适用于iOS8及更高版本;二是利用App-Prefs scheme,可以直接打开系统设置主界面。这些方法可以帮助开发者在用户权限管理上提供更好的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程,我们希望访问系统的设置界面让用户去修改某些权限。比如:用户不允许发送通知时候,我们有精彩内容推荐检测到用户关闭了通知,我们可以友好的提示用户该项权限关闭,希望跳转至用户设置界面进行修改。

网上很多写法是:
1、设置scheme:prefs
这里写图片描述
2、通过openUrl方法调用:prefres:root=“某项服务”&path=“具体选项路径”这样的格式去调用相关设置选项。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=NOTIFICATIONS_ID&path=com.yxc8710.SettingSkip"] options:@{} completionHandler:nil];

这样写的话,我们发现还是不能实现该应用的设置跳转。原因是iOS10之后系统不支持这种形式对系统设置里面的具体项进行跳转,仅仅支持跳转自己的应用设置。那么iOS10之后我们怎么处理啦?

1、使用UIApplicationOpenSettingsURLString

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

UIApplicationOpenSettingsURLString字段,是在iOS8之后提供的,支持iOS8,iOS9,iOS10系统,推荐使用。
而iOS 10之后prefs:root=bundleID和prefs:root=服务失效。但是在prefs:root=服务在iOS10之前的系统还是有效的,prefs:root=bundleID在iOS8、iOS9系统有有效。

2、使用App-Prefs
使用这个scheme,而且不用添加,打开”App-Prefs:”URL可以调用系统的设置主界面

帖上一段完整代码:

- (void)viewDidAppear:(BOOL)animated {
    if (@available(iOS 10.0, *)) {
        [[UNUserNotificationCenter currentNotificationCenter] getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) {
            if (settings.authorizationStatus == UNAuthorizationStatusNotDetermined)
            {
                NSLog(@"未选择");
                [self opentNotificationAlert];
            }else if (settings.authorizationStatus == UNAuthorizationStatusDenied){
                NSLog(@"未授权");
                [self opentNotificationAlert];
            }else if (settings.authorizationStatus == UNAuthorizationStatusAuthorized){
                NSLog(@"已授权");
            }
        }];
    } else {
        if ([[UIApplication sharedApplication] currentUserNotificationSettings].types == 0) {
            [self opentNotificationAlert];
        }
    }
}

- (void)opentNotificationAlert {
    /**< 弹出框 */
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"推送通知关闭"
                                                                             message:@"请前往打开通知,获取更多精彩瞬间!"
                                                                      preferredStyle:UIAlertControllerStyleAlert];
    [alertController addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

    }]];
    [alertController addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self.presentedViewController dismissViewControllerAnimated:YES completion:nil];
        if (@available(iOS 10.0, *)) {
//            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"App-Prefs:"] options:@{} completionHandler:nil];
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] options:@{} completionHandler:nil];
        } else {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=NOTIFICATIONS_ID&path=com.yxc8710.SettingSkip"]];//prefs:root=服务&path=路径
//            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=com.yxc8710.SettingSkip"]];//prefs:root=bundleID
//            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
        }
    }]];
    [self presentViewController:alertController animated:YES completion:nil];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值