做iOS开发,免不了要让用户选张照片发个头像,或者上传个证件照。可一到调用相册那步,不少开发者就卡住了——点按钮没反应,控制台也没报错,用户一脸懵,其实问题出在权限上。
为什么你的App打不开相册?
iOS对隐私管得严,相册属于敏感数据,不主动申请权限,系统直接拒绝访问。哪怕你代码写得再漂亮,没走这一步,功能就是跑不通。
配置Info.plist是第一步
想调相册,先得在项目的Info.plist里声明用途。加一条NSPhotoLibraryUsageDescription,后面跟上你想说的理由。别偷懒写“用于功能实现”,用户一看就知道你在敷衍。换成“需要选取照片来设置个人头像”这种具体说明,通过率更高。
<key>NSPhotoLibraryUsageDescription</key>
<string>需要选取照片来设置个人头像</string>
运行时请求权限更关键
光有plist还不够。iOS 14以后,如果想修改照片(比如保存新图片),还得加上NSPhotoLibraryAddUsageDescription。而且真正要用的时候,得主动拉起权限弹窗,不能指望系统帮你搞定。
用PHPhotoLibrary来检查当前授权状态:
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusNotDetermined) {
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
// 可以安全调相册了
[self presentImagePicker];
}
}];
} else if (status == PHAuthorizationStatusAuthorized) {
[self presentImagePicker];
}
用户拒绝了怎么办?
很多人一次被拒就歇菜。其实可以判断状态是不是PHAuthorizationStatusDenied,如果是,提醒用户去“设置-隐私-照片”里手动开启。别硬弹,容易惹人烦,加个引导按钮更友好。
别忘了真机测试
模拟器上权限表现和真机不一样,尤其是首次弹窗逻辑。上线前一定拿真机跑一遍流程,确认提示语清晰、跳转顺畅。不然用户第一次打开App就遇到黑屏或无响应,差评可能就来了。
调相册看着小,处理不好直接影响体验。把权限流程理顺了,后面的图像选择、上传、裁剪才能顺下去。