11相册权限不提示问题 ios - CSDN
  • Ios 11系统关闭了查看相册权限,需要在plist中添加权限就可以打开相册,同样在打开相册的时候也没有权限的访问. 但是在拍摄照片的时候要注意了,拍摄照片的时候一般是会保存到本地相册的,这个时候就需要增加一个新...

    Ios 11系统关闭了查看相册的权限,不需要在plist中添加权限就可以打开相册,同样在打开相册的时候也没有权限的访问.

    但是在拍摄照片的时候要注意了,拍摄照片的时候一般是会保存到本地相册的,这个时候就需要增加一个新的权限访问,就是保存照片到相册的权限.

    如果有保存照片到相册的代码,但是没有开放此权限,程序是会崩溃的.后果还是很严重的


    解决办法:

    1.plist 的添加方法是:添加下面的一项,提示文字自定义
    Privacy - Photo Library Additions Usage Description

    2.source code的添加方式:
     <key>NSPhotoLibraryAddUsageDescription</key>
    <string>App需要您的同意,才能保存照片</string>


    展开全文
  • 问题描述:iOS11已经在plist文件中写了相关权限设置,但是在使用UIImagePickerController打开相册的时候却不提示用户选择权限,有以下几条情况: UIImagePickerController同样的设置使用相机会有权限选择提示,设置...

    一:打开相册不提示用户权限

    问题描述:iOS11已经在plist文件中写了相关权限设置,但是在使用UIImagePickerController打开相册的时候却不提示用户选择权限,有以下几条情况:

    1. UIImagePickerController同样的设置使用相机会有权限选择提示,设置中也没有关于相册的设置;
    2. 项目中有用到TZImagePickerController的第三方库多选照片,他在进入图库的时候就会有权限提示,设置中关于相册的权限是:读与写;
    3. 将图片保存进手机相册会有权限提醒,设置中关于相册的权限是:写入;

    带着以上疑问我看了TZImagePickerController的源码,发现他其实是在发现PHAuthorizationStatus为用户未作出明确选择的情况下自己主动请求了一次权限设置,代码如下:

    /// Return YES if Authorized 返回YES如果得到了授权
    - (BOOL)authorizationStatusAuthorized {
        NSInteger status = [self.class authorizationStatus];
        if (status == 0) {
            /**
             * 当某些情况下AuthorizationStatus == AuthorizationStatusNotDetermined时,无法弹出系统首次使用的授权alertView,系统应用设置里亦没有相册的设置,此时将无法使用,故作以下操作,弹出系统首次使用的授权alertView
             */
            [self requestAuthorizationWithCompletion:nil];
        }
        
        return status == 3;
    }
    
    + (NSInteger)authorizationStatus {
        if (iOS8Later) {
            return [PHPhotoLibrary authorizationStatus];
        } else {
            return [ALAssetsLibrary authorizationStatus];
        }
        return NO;
    }
    
    - (void)requestAuthorizationWithCompletion:(void (^)())completion {
        void (^callCompletionBlock)() = ^(){
            dispatch_async(dispatch_get_main_queue(), ^{
                if (completion) {
                    completion();
                }
            });
        };
        
        if (iOS8Later) {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                    callCompletionBlock();
                }];
            });
        } else {
            [self.assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                callCompletionBlock();
            } failureBlock:^(NSError *error) {
                callCompletionBlock();
            }];
        }
    }
    

    注:这里主动请求代码权限获得允许后不会跟系统的提示一样直接跳到相册,需要自己通过判断确定,TZImagePickerController的处理办法如下,当然也可以自己在权限设置的block里面设置

    //下判断权限,如果没有权限就会先展示一个自定义的页面,然后开始定时器来判断是否已经获取权限,如果获取到权限则跳转到选择图片页面
    if (![[TZImageManager manager] authorizationStatusAuthorized]) {
                _tipLabel = [[UILabel alloc] init];
                _tipLabel.frame = CGRectMake(8, 120, self.view.tz_width - 16, 60);
                _tipLabel.textAlignment = NSTextAlignmentCenter;
                _tipLabel.numberOfLines = 0;
                _tipLabel.font = [UIFont systemFontOfSize:16];
                _tipLabel.textColor = [UIColor blackColor];
                NSDictionary *infoDict = [NSBundle mainBundle].localizedInfoDictionary;
                if (!infoDict) {
                    infoDict = [NSBundle mainBundle].infoDictionary;
                }
                NSString *appName = [infoDict valueForKey:@"CFBundleDisplayName"];
                if (!appName) appName = [infoDict valueForKey:@"CFBundleName"];
                NSString *tipText = [NSString stringWithFormat:[NSBundle tz_localizedStringForKey:@"Allow %@ to access your album in \"Settings -> Privacy -> Photos\""],appName];
                _tipLabel.text = tipText;
                [self.view addSubview:_tipLabel];
                
                if (iOS8Later) {
                    _settingBtn = [UIButton buttonWithType:UIButtonTypeSystem];
                    [_settingBtn setTitle:self.settingBtnTitleStr forState:UIControlStateNormal];
                    _settingBtn.frame = CGRectMake(0, 180, self.view.tz_width, 44);
                    _settingBtn.titleLabel.font = [UIFont systemFontOfSize:18];
                    [_settingBtn addTarget:self action:@selector(settingBtnClick) forControlEvents:UIControlEventTouchUpInside];
                    [self.view addSubview:_settingBtn];
                }
                //开启定时器
                _timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(observeAuthrizationStatusChange) userInfo:nil repeats:YES];
            } else {
                [self pushPhotoPickerVc];
            }
    
    - (void)observeAuthrizationStatusChange {
        if ([[TZImageManager manager] authorizationStatusAuthorized]) {
            [_tipLabel removeFromSuperview];
            [_settingBtn removeFromSuperview];
            [_timer invalidate];
            _timer = nil;
            [self pushPhotoPickerVc];
        }
    }
    

    最后总结:打开相册不在需要用户授权,也就是说,默认对手机相册拥有读权限,因此在这里本人也就没有做处理,检查了手机上新更新的其他软件,如果只需要访问手机相册也都没有设置。等上线的时候看一下会不会被拒再来更新,如果已经有做过实验的小伙伴谢谢告诉我一声,不胜感激。

    展开全文
  • iOS11相册权限问题

    2019-06-13 13:25:17
    为什么80%的码农都做了架构师?>>> ...

    iOS很多用户信息相关都需要权限,但是,项目中偶然发现,没有提示相册读取,居然也可以!

    后来发现,iOS11以后,相册有两个权限:

    NSPhotoLibraryUsageDescription

    NSPhotoLibraryAddUsageDescription

    即:

    Privacy - Photo Library Usage Description

    Privacy - Photo Library Additions Usage Description

    前者是相册的读取,在iOS11之前会提示用户读取相册,后者是写入,会提示用户保存至相册

    在iOS11中,前者不会提示出来,也可以访问,这一点,,,不清楚苹果的用意是什么

    转载于:https://my.oschina.net/rainwz/blog/2054448

    展开全文
  • 获取相册权限,网上的写法,大多都感觉有点问题,不是特别完美. 方案1: 直接给了返回值, 那对于PHAuthorizationStatusNotDetermined这种的,后面可能权限给了允许, 然后还去调保存相册就会出问题. 这种方案通过. +...

    获取相册权限,网上的写法,大多都感觉有点问题,不是特别完美. 

    方案1: 直接给了返回值, 那对于PHAuthorizationStatusNotDetermined这种的,后面可能权限给了不允许, 然后还去调保存相册就会出问题.  这种方案不通过.

    + (BOOL)hasPermissionForPhotoGallery {
        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
        if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) {
            return NO;
        }
        return YES;
    }

    方案2: 加了信号量,用信号量阻塞线程,当用户做了决定之后再返回.  看上去是没有问题的, 但是在使用的过程中发现了线程卡死.
    第一次的时候 , 系统请求权限的弹框迟迟不出来,点击屏幕没有响应,之后推出一次后台,权限的弹窗才出现,同意/不同意 权限之后,才能解除死锁,不通过

    + (BOOL)isCanVisitPhotoLibrary {
        
        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
        if (status == PHAuthorizationStatusAuthorized) {
            return YES;
        }
        if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) {
            return NO;
        }
        
        __block BOOL isAblity = YES;
        dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(queue, ^{
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                if (status != PHAuthorizationStatusAuthorized) {
                    NSLog(@"未开启相册权限,请到设置中开启");
                    isAblity = NO;
                    dispatch_semaphore_signal(semaphore);
                }
            }];
        });
        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
        return isAblity;
    }

    最终结果,由于PHAuthorizationStatusNotDetermined 这种的肯定是异步的给出结果,所以只能以异步对抗异步(用魔法打败魔法) , 所以结果只能在block中给出, 就变成了下面的这样,不会造成死锁,block中的结果肯定正确.
    其他的相机,麦克风权限的获取也可以按照类似的方式

    
    //MARK:相册权限检测
    + (void)isCanVisitPhotoLibrary:(void(^)(BOOL))result {
        
        /// 获取当前的状态
        //+ (PHAuthorizationStatus)authorizationStatus;
        /// 请求权限
        //+ (void)requestAuthorization:(void(^)(PHAuthorizationStatus status))handler;
        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
        if (status == PHAuthorizationStatusAuthorized) {
            result(YES);
            return;
        }
        if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied) {
            result(NO);
            return ;
        }
        
        if (status == PHAuthorizationStatusNotDetermined) {
            
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                // 回调是在子线程的
                NSLog(@"%@",[NSThread currentThread]);
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (status != PHAuthorizationStatusAuthorized) {
                          NSLog(@"未开启相册权限,请到设置中开启");
                          result(NO);
                          return ;
                      }
                      result(YES);
                });
      
            }];
        }
        
    }
    

     

     

    展开全文
  • iOS 相册权限绕过漏洞

    2019-03-01 20:20:42
    在 App Store 上有一款名叫 “时间规划局” 的应用可以在未获取相册权限的情况下读取照片。可能是 App 调用了苹果的私有库,绕过了系统的授权机制。 在 iOS 12.1.1 进行测试,下载并打开应用,点击菜单自定义小组件...
  • -- 相册 --&gt;&lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&gt;&lt;string&gt;App需要您的同意,才能访问相册&lt;/string&gt;&lt;!-- 相机 --&gt;&lt;key&...
  • 一、感言 新年伊始,万象更新,一转眼,就2019年了。...在项目中,多媒体的使用非常常见,那么,询问设备的权限可少。 优点:这么做极大的增强了用户体验,友好地告知用户去开启权限。 例如:相机...
  • 其中一个问题,就是设备的权限,当访问,相机,相册权限的时候,闪退。网上搜索,iOS 10 的设备权限需要在plist 文件里面添加字段。 推荐的网址: iOS 10 相机等崩溃 iOS 开发 适配iOS10以及Xcode8 iOS 10 ...
  • iOS相机相册使用权限

    2016-12-10 08:11:44
    NSPhotoLibraryUsageDescription App需要您的同意,才能访问相册 NSCameraUsageDescription App需要您的同意,才能访问相机 NSMicrophoneUsageDescription App需要您的同意,才能访问麦克风 ...
  • 这里仅以相册的为例: plist文件里面添加,Privacy - Photo Library Usage Description,Value值为描述,弹出的提示框会显示出来。 修改plist 升到iOS10之后,需要设置权限的有: ...
  • iOS发布后,应用中获取相册权限应用崩溃crashlog如下:This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app’s Info.plist must contain an ...
  • iOS 相册相机权限

    2016-01-06 10:43:52
    typedef enum {   kCLAuthorizationStatusNotDetermined = 0, // 用户尚未做出选择这个应用程序的问候   kCLAuthorizationStatusRestricted, // 此应用...可能是家长控制权限   kCLAuthorizationSt
  • 前天刚更新了xcode8,模拟器也是iOS10的了,会出现一些问题,这里我们说一下调用相册选取图片遇到的问题。 今天打开电脑运行程序发现,调用相册来选取照片突然就出错,一直在一些底层语言的地方死循环走了。在网上...
  • --相册--> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册</string> <!--相机--> <key>NSCameraUsageDescription</key&g...
  • iOS11隐私权限变动

    2018-02-05 17:44:34
    iOS11访问权限列表 隐私数据 对应key值 提示相册(读) NSPhotoLibraryUsageDescription "XXX"需要您的同意,才能访问相册 相册(写) ...
  • 打包提交appstore如果用到了如下权限需要修改提示语,详细描述使用这个权限的原因,如修改提示语appstore审核可能会被拒绝 - 通讯录 NSContactsUsageDescription - 麦克风 NSMicrophoneUsageDescription - 相册 ...
  • 调用相册,需要权限: This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key ...
  • 在升级xcode8时候,调用手机相机相册等,项目会crash。控制台会打印提示,需要你在Info.plist文件添加key值配置。 1、crash,控制台打印提示   2、访问用户数据,都需配置权限   3.具体key配置操作   PS:...
  • 为什么要获取权限在越来越注重个人隐私的今天,用户很...在你获取相册数据的时候,如果用户拒绝授权,那么可能会获取到数据,此时需要给用户相应的提示,告知用户是权限问题,此时,就需要得知相应的权限状态给用户
  • 所以为了解决这个问题,自己想出的方法是获取IOS上相机权限的状态,在Unity端通过获取到ios相机权限的状态进行处理,未开启权限给与提示让用户提供权限再进行游戏。 所以为了解决这个问题,自己通过咨询发现需要...
1 2 3 4 5 ... 20
收藏数 2,240
精华内容 896
热门标签
关键字:

11相册权限不提示问题 ios