• IOS10 权限问题

    2019-08-06 14:01:33
    在升级了IOS10之后,苹果提供了类似于Andorid中的权限控制机制,即在使用手机私有权限的时候,需要在代码中添加申请。 。以下是收集到的权限大全:<!-- 相册 --> <key>...

    无需原生开发基础,也能完美呈现京东商城。《混合开发京东商城系统,提前布局大前端》课程融合vue、Android、IOS等目前流行的前端和移动端技术,混合开发经典电商APP——京东。课程将各种复杂功能与知识点完美融合,从技术原理到开发上线,让你真实感受到一个明星产品开发的全过程。功能实现之外,还有一流用户体验和优秀交互设计等你一探究竟,拓宽开发眼界。


    在升级了IOS10之后,苹果提供了类似于Andorid中的权限控制机制,即在使用手机私有权限的时候,需要在代码中添加申请。
    这里写图片描述
    这里写图片描述


    以下是收集到的权限大全:

    <!-- 相册 --> 
    <key>NSPhotoLibraryUsageDescription</key> 
    <string>App需要您的同意,才能访问相册</string> 
    <!-- 相机 --> 
    <key>NSCameraUsageDescription</key> 
    <string>App需要您的同意,才能访问相机</string> 
    <!-- 麦克风 --> 
    <key>NSMicrophoneUsageDescription</key> 
    <string>App需要您的同意,才能访问麦克风</string> 
    <!-- 位置 --> 
    <key>NSLocationUsageDescription</key> 
    <string>App需要您的同意,才能访问位置</string> 
    <!-- 在使用期间访问位置 --> 
    <key>NSLocationWhenInUseUsageDescription</key> 
    <string>App需要您的同意,才能在使用期间访问位置</string> 
    <!-- 始终访问位置 --> 
    <key>NSLocationAlwaysUsageDescription</key> 
    <string>App需要您的同意,才能始终访问位置</string> 
    <!-- 日历 --> 
    <key>NSCalendarsUsageDescription</key> 
    <string>App需要您的同意,才能访问日历</string> 
    <!-- 提醒事项 --> 
    <key>NSRemindersUsageDescription</key> 
    <string>App需要您的同意,才能访问提醒事项</string> 
    <!-- 运动与健身 --> 
    <key>NSMotionUsageDescription</key> <string>App需要您的同意,才能访问运动与健身</string> 
    <!-- 健康更新 --> 
    <key>NSHealthUpdateUsageDescription</key> 
    <string>App需要您的同意,才能访问健康更新 </string> 
    <!-- 健康分享 --> 
    <key>NSHealthShareUsageDescription</key> 
    <string>App需要您的同意,才能访问健康分享</string> 
    <!-- 蓝牙 --> 
    <key>NSBluetoothPeripheralUsageDescription</key> 
    <string>App需要您的同意,才能访问蓝牙</string> 
    <!-- 媒体资料库 --> 
    <key>NSAppleMusicUsageDescription</key> 
    <string>App需要您的同意,才能访问媒体资料库</string>
    
    如果不起作用,可以请求后台权限,类似于这样:
    <key>UIBackgroundModes</key>
    <array> 
    <!-- 在这里写上你在后台模式下要使用权限对应的key --> 
    <string>location</string>
    ...
    </array>
    
    展开全文
  • iOS10 权限崩溃问题

    2016-06-14 17:43:52
    iOS10 权限崩溃问题  今天 手机升级了 iOS10 Beta,然后用正在开发的项目 装了个ipa包,发现点击有关 权限访问 直接Crash了,并在控制台输出了一些信息: This app has crashed because it attempted to access ...

    iOS10 权限崩溃问题


           今天 手机升级了 iOS10 Beta,然后用正在开发的项目 装了个ipa包,发现点击有关 权限访问 直接Crash了,并在控制台输出了一些信息:

    This app has crashed because it attempted to access privacy-sensitive data without a usage description.  The app's Info.plist must contain an NSContactsUsageDescription key with a string value explaining to the user how the app uses this data.

    意思是说:你需要在info.plist文件 添加一个“NSContactsUsageDescription ”的Key,Value添加一个描述。


    1,在项目中找到info.plist文件,右击有个 Open As,以Source Code 的形式打开

    2,分别复制 以下 Value 和Key,Key 一定不能错,Value 貌似可以随便填写


    相机权限描述:

        <key>NSCameraUsageDescription</key>
        <string>cameraDesciption</string>

    通信录:
        <key>NSContactsUsageDescription</key>
        <string>contactsDesciption</string>

    麦克风:
        <key>NSMicrophoneUsageDescription</key>
        <string>microphoneDesciption</string>

    相机:
        <key>NSPhotoLibraryUsageDescription</key>
        <string>photoLibraryDesciption</string>


    eg:其他权限描述,debug 控制台都会有输出的,自行添加就OK


    3,在info.plist 文件上 复制上,然后 保存,如下图:

    Source Code 的形式:



    Property List 的展现形式:



    4,Clean之后,运行就OK了


    欢迎加入iOS编程交流群:77081333



    展开全文
  • 言归正传,今天的问题是解决iOS10系统下首次按钮APP弹出的网络权限提示所带来了问题以及优化。 起因   查了相关文章知道由于大陆工信部出台的新规指出,应用在未经用户允许的前提下,系统不能授予其使用联网、...

    我刚经历了一场末日(停电),特别是在你想写文档的时候。。。

    言归正传,今天的问题是解决iOS10系统下首次按钮APP弹出的网络权限提示所带来了问题以及优化。

    起因

     

    查了相关文章知道由于大陆工信部出台的新规指出,应用在未经用户允许的前提下,系统不能授予其使用联网、获取定位的功能。Apple在iOS10系统中加入了关于应用使用数据的授权弹窗提示,用户在iOS系统及以上系统中第一次打开应用时,会被要求对于是否授予应用联网权限进行选择。

     

    问题

    Apple把自己的问题解决了, 但是Apple没有给出官方的获取选择事件的回调,这样就是给开发者挖坑了。

    对于很多开发者习惯于把预加载接口放到AppDelegate的同志就很苦恼了。

    这样会造成配置接口请求失败,首页数据为空的情况,第一次获取DeviceToken失败,添加推送通知失败,第三方初始化失败,以至于导致很多延伸的问题。

    解决

    1.根据CTCellularData类获取网络权限状态以及监听状态改变回调(推荐)

    我就在使用此方法。话不多说上代码,注释很详细;

    添加CoreTelephony系统库,在AppDelegate.m里#import<CoreTelephony/CTCellularData.h>

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        
        //1.获取网络权限 根绝权限进行人机交互
        if (__IPHONE_10_0) {
            [self networkStatus:application didFinishLaunchingWithOptions:launchOptions];
        }else {
            //2.2已经开启网络权限 监听网络状态
            [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
        }
        
        //初始化window
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        [self.window setBackgroundColor:[UIColor whiteColor]];
        
    //    //创建UI
        [self createWindowRootWithType:2];
        
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    /*
     CTCellularData在iOS9之前是私有类,权限设置是iOS10开始的,所以App Store审核没有问题
     获取网络权限状态
     */
    - (void)networkStatus:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        //2.根据权限执行相应的交互
        CTCellularData *cellularData = [[CTCellularData alloc] init];
        
        /*
         此函数会在网络权限改变时再次调用
         */
        cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {
            switch (state) {
                case kCTCellularDataRestricted:
                    
                    NSLog(@"Restricted");
                    //2.1权限关闭的情况下 再次请求网络数据会弹出设置网络提示
                    [self getAppInfo];
                    break;
                case kCTCellularDataNotRestricted:
                    
                    NSLog(@"NotRestricted");
                    //2.2已经开启网络权限 监听网络状态
                    [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
    //                [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
                    break;
                case kCTCellularDataRestrictedStateUnknown:
                    
                    NSLog(@"Unknown");
                    //2.3未知情况 (还没有遇到推测是有网络但是连接不正常的情况下)
                    [self getAppInfo];
                    break;
                    
                default:
                    break;
            }
        };
    }
    
    /**
     实时检查当前网络状态
     */
    - (void)addReachabilityManager:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];
        
        //这个可以放在需要侦听的页面
        //    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(afNetworkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
        [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            switch (status) {
                case AFNetworkReachabilityStatusNotReachable:{
                    NSLog(@"网络不通:%@",@(status) );
                    break;
                }
                case AFNetworkReachabilityStatusReachableViaWiFi:{
                    NSLog(@"网络通过WIFI连接:%@",@(status));
                    if (self.mallConfigModel == nil) {
                       [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
                    }
                    break;
                }
                case AFNetworkReachabilityStatusReachableViaWWAN:{
                    NSLog(@"网络通过无线连接:%@",@(status) );
                    if (self.mallConfigModel == nil) {
                        [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
                    }
                    break;
                }
                default:
                    break;
            }
        }];
        
        [afNetworkReachabilityManager startMonitoring];  //开启网络监视器;
    }
    
    - (void)getInfo_application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        
        //第三方库初始化
        [self initValueThirdParty:application didFinishLaunchingWithOptions:launchOptions];
        
    //    //获取初始信息
        [self initData];
        
        //添加通知
        [self addNotification];
    }

     

     

    这样也同时解决了用户如果选择不允许和限制两种情况,在用户没有统一联网的情况下,APP会显示没有网络的UI,重新进入APP会调用在不允许状态下会调用一个测试接口,APP会自动弹出重新选择网络权限以及说明的弹窗,进入设置修改过APP联网权限以后选择回到APP就会触发cellularDataRestrictionDidUpdateNotifier,在回调里进行相应的人机交互就可以了。

    2018年08月09日更新

    这段时间一直出现微信没有注册的问题,不是必现而且只有线上存在,推荐大家第三方库(特别是需要网络的库)的初始化不需要放到判断网络权限里面,直接初始化。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
            
        //默认更新
        self.appIsUpdate = YES;
        
        //1.获取网络权限 根绝权限进行人机交互
        if (IS_IOS_(10)) {
            [self networkStatus:application didFinishLaunchingWithOptions:launchOptions];
        }else {
            //2.2已经开启网络权限 监听网络状态
            [self addReachabilityManager:application didFinishLaunchingWithOptions:launchOptions];
        }
        
        //初始化第三方库
        [self initValueThirdParty:application didFinishLaunchingWithOptions:launchOptions];
        
        //启动页停留1秒钟。
        [NSThread sleepForTimeInterval:1.0];
        
        //初始化window
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        [self.window setBackgroundColor:[UIColor whiteColor]];
        
        //创建主视图
        if ([DataBase nowUser]) {
            
            [self createWindowRootWithType:2];
        }else {
            
            [self createWindowRootWithType:1];
        }
        
        [self.window makeKeyAndVisible];
        return YES;
    }

    2.延迟请求

    就是把配置请求放到首页VC里,不要放到AppDelegate里,同时监听网络状态(AF,其他第三方等)有个致命性的问题就是获取网络状态会有一定的延迟(亲测),导致很多情况,还有就是要自己处理权限弹框以及对原有代码逻辑要进行修改。

     

    总结

    这个问题遇到几次了,原来都是用第二种方式进行了一定的优化,这次的APP有一个配置信息接口导致出现问题,写下来作为记录,方法还有很多种,不足的地方还有很多,仅供大家参考。

     

     

     

     

     

     

     

     

     

    展开全文
  • iOS10访问权限问题Crash解决方法

    升级iOS10后当需要访问相册、相机的时候,发现点击崩溃了,饶了一圈,发现是权限问题,以下是关于访问权限的问题的解决方法。

    在项目中找到info.plist,进行如下配置。

    Privacy - Camera Usage Description    需要访问您的相机

    Privacy - Contacts Usage Description   需要访问您的通讯录

    Privacy - Microphone Usage Description  需要访问您的麦克风

    Privacy - Photo Library Usage Description  需要访问您的相册



    还有一种快捷方式就是直接输入Privacy,会出现如图提示,然后根据项目需要,对权限进行配置




    展开全文
  • iOS 10权限设置

    2016-11-01 15:01:51
    iOS 10发布以来,苹果公司为了用户的信息安全,在访问内部应用都加入了隐私权限设置,让用户来选择是否使用。如果在开发中不对这些权限进行设置的话造成crash。在程序的Info.plist中添加如以下设置: 权限 info....

    iOS 10发布以来,苹果公司为了用户的信息安全,在访问内部应用都加入了隐私权限设置,让用户来选择是否使用。如果在开发中不对这些权限进行设置的话造成crash。

    在程序的Info.plist中添加如以下设置:
    这里写图片描述

    可以从下表中选择相应权限进行配置

    权限 info.plist中key info.plist中Value
    相册 NSPhotoLibraryUsageDescription 是否允许此app使用相册?
    相机 NSCameraUsageDescription 是否允许此app使用相机?
    麦克风 NSMicrophoneUsageDescription 是否允许此app使用
    位置 NSLocationUsageDescription 是否允许此app使用位置?
    在使用期间访问位置 NSLocationWhenInUseUsageDescription 是否允许此app在使用期间访问位置
    始终访问位置 NSLocationAlwaysUsageDescription 是否允许此app始终访问位置?
    日历 NSCalendarsUsageDescription 是否允许此app使用日历?
    提醒事项 NSRemindersUsageDescription 是否允许此app使用提醒事项
    运动与健身 NSMotionUsageDescription 是否允许此app使用运动与健身
    健康更新 NSHealthUpdateUsageDescription 是否允许此app使用健康更新?
    健康分享 NSHealthShareUsageDescription 是否允许此app使用健康分享?
    蓝牙 NSBluetoothPeripheralUsageDescription 是否允许此app使用蓝牙?
    媒体资料库 NSAppleMusicUsageDescription 是否允许此app使用媒体资料库?
    语音识别 NSSpeechRecognitionUsageDescription 是否允许此app使用语音识别?
    展开全文
  • iOS10获得系统权限

    2016-09-26 11:46:08
    iOS 10 对系统隐私权限的管理更加严格,如果你不设置就会直接崩溃,一般解决办法都是在info.plist文件添加对应的Key-Value就可以了。 相册 -->  NSPhotoLibraryUsageDescription  App需要您的同意,才能...
  • 我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃。 具体如下图: QQ20160914-0.png 注意,添加的时候,末尾不要有空格 麦克风权限:Privacy - Microphone Usage Description ...
  • iOS10开发之权限问题(不设置权限就会直接crash)
  • iOS开发 iOS 10权限问题

    2016-11-09 15:39:41
    我们需要打开info.plist文件添加相应权限的说明,否则程序在iOS10上会出现崩溃。 具体如下图:注意,添加的时候,末尾不要有空格备注:前面的英文是 Key , 后面的中文是Value; 麦克风权限:Privacy - Microphone...
  • iOS 10下 ,首次进入应用时,会有询问是否允许网络连接权限的的弹窗,为更好进行用户交互,需要在打开应用时获取应用禁用网络权限状态(状态分为:未知、限制网络、未限制网络),客户端根据不同的权限状态定制...
  • 获取相机权限: NSCameraUsageDescription  App需要您的同意,才能访问相机  获取相册权限: NSPhotoLibraryUsageDescription  App需要您的同意,才能访问相册  获取日历权限...
  • iOS隐私权限设置

    2018-11-21 15:46:15
    iOS隐私权限设置有: 麦克风权限:Privacy - Microphone Usage Description 是否允许此App使用你的麦克风? 相机权限: Privacy - Camera Usage Description 是否允许此App使用你的相机? 相册权限: Privacy - ...
  • 一、iOS 11图片保存相册权限 NSPhotoLibraryAddUsageDescription NSPhotoLibraryAddUsageDescription是iOS 11新推出的隐私规则,在写入相册时会询问,没有的话就会闪退。 在info.plist中添加时,Key选择Privacy ...
  • iOS10之后权限限制

    2018-07-05 11:41:37
    1:当在ios上的应用需要访问手机权限的时候,比如摄像头,或者相册时请点击这里点击打开链接.
  • ios 10权限适配<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string> <!-- 相机 --> <key>NSCameraUsageDescription</key> <string>App需要您的同意,...
  • iOS10针对国行手机多了一个无线和蜂窝访问权限的选择。许多应用在第一次安装的时候会自动弹出一个alertview询问用户是否允许应用使用包括无线和蜂窝的数据。但也有部分是不会弹出的(iOS10系统bug,解决办法可自行...
  • iOS 10系统第安转会提示是否允许使用网络,这个时候会有一个空档,很多app如果没有引导页的话就直接进入主页,那么可能会出现网络无法请求的问题,解决问题之一:进入主页直接设置一个过渡控制器,在控制器内作处理...
  • IOS 10 定位问题

    2016-11-04 18:19:18
    iOS 10系统定位不回调问题,以及开启定位权限提示框,几秒后消失。  版本不同存在的为题不同:  这个是ios arc机制引起的问题。arc回收内存,定位对象被销毁。在iOS 10以前不存在,iOS 10开始存在该问题。  ...
1 2 3 4 5 ... 20
收藏数 56,417
精华内容 22,566
关键字:

10权限 ios