PHPhotoLibrary 请求授权,不请求
Posted
技术标签:
【中文标题】PHPhotoLibrary 请求授权,不请求【英文标题】:PHPhotoLibrary requestAuthorization, not requesting 【发布时间】:2016-01-29 11:28:12 【问题描述】:为了测试,我试图重新创建系统“请求访问”弹出体验。
更新: ios 11下,删除App后会再次弹出系统弹窗。
(上一个问题)
应用程序第一次运行(也是仅次),系统弹出窗口显示,请求访问。之后,甚至不删除应用程序并重新启动设备都会再次触发该弹出窗口。
换句话说,设备会“记住”用户请求并且无法重置它。
代码如下:
[phphotoLibrary requestAuthorization:^(PHAuthorizationStatus status)
switch (status)
case PHAuthorizationStatusAuthorized:
NSLog(@"PHAuthorizationStatusAuthorized");
break;
case PHAuthorizationStatusDenied:
NSLog(@"PHAuthorizationStatusDenied");
break;
case PHAuthorizationStatusNotDetermined:
NSLog(@"PHAuthorizationStatusNotDetermined");
break;
case PHAuthorizationStatusRestricted:
NSLog(@"PHAuthorizationStatusRestricted");
break;
];
在设置中关闭访问时,它会继续打印“PHAuthorizationStatusDenied”。但不显示任何弹出窗口。立即返回。
建议将“捆绑显示名称”添加到 plist。尝试了无济于事,空值、$(PRODUCT_NAME) 和不同的字符串。
清理项目,删除 DrivedData(每次都从模拟器中删除 App)。没有运气。
更多信息:
一旦您在“设置”中关闭照片访问,Apple 示例代码“SamplePhotosApp”就会崩溃。
【问题讨论】:
这里描述了缓存授权状态响应问题的解决方案(即使在应用程序删除后):***.com/questions/27726354/… 【参考方案1】:经过进一步阅读,这似乎是设计使然。
来自 Apple:
此方法总是立即返回。如果用户以前 授予或拒绝照片库访问权限,它执行 调用时的处理程序块;否则,它会显示警报并 只有在用户响应警报后才执行块。
如果用户被提示一次,则说“此方法总是立即返回”。之后它将不再显示请求。似乎没有办法(但一些自定义消息)再次使用系统消息。
【讨论】:
请看我的回答:***.com/questions/26595343/… 从链接的答案中,解决方法是更改捆绑标识符。似乎问题仍然存在;也就是说,一旦写入,就无法“重置”应用程序的捆绑 ID,除非完全重置设备。当然,在模拟器上,删除设备就可以了。【参考方案2】:重要的是将此添加到您的应用程序 Info.plist 文件中。 《隐私——图片库使用说明》
我用过这样的东西: "用于访问照片库中的照片。"
此描述将显示在请求访问警报框中。如果需要,可以本地化。
+ (void)imageLibraryCheckAccess:(UIViewController *)presenting
handler:(void (^)(PHAuthorizationStatus status))handler
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusNotDetermined)
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status)
if (status != PHAuthorizationStatusAuthorized)
if (handler != nil)
handler(status);
NSString *title = NSLocalizedStringWithDefaultValue(@"photo.library.access.disabled.alert.title",
@"Localizable", [NSBundle mainBundle],
@"Photos access", @"Alert title.");
NSString *text = NSLocalizedStringWithDefaultValue(@"photo.library.access.disabled.alert.text",
@"Localizable", [NSBundle mainBundle],
@"You explicitly disabled photo library access. This results in inability to work with photos.",
@"Alert text.");
[self alertWithPresenting:presenting title:title text:text buttons:@[[L10n okButton]]
handler:nil];
else if (status == PHAuthorizationStatusAuthorized)
if (handler != nil)
handler(status);
];
else if (status != PHAuthorizationStatusAuthorized)
if (handler != nil)
handler(status);
NSString *title = NSLocalizedStringWithDefaultValue(@"photo.library.access.notauthorized.alert.title",
@"Localizable", [NSBundle mainBundle],
@"Photos access", @"Alert title.");
NSString *text = NSLocalizedStringWithDefaultValue(@"photo.library.access.notauthorized.alert.text",
@"Localizable", [NSBundle mainBundle],
@"Photo library access is disabled. Please check the application permissions or parental control settings in order to work with photos.", @"Alert text.");
[self alertWithPresenting:presenting title:title text:text buttons:@[[L10n okButton]]
handler:nil];
else if (status == PHAuthorizationStatusAuthorized)
if (handler != nil)
handler(status);
这是我的使用方法:
[YourClassName imageLibraryCheckAccess:self handler:^(PHAuthorizationStatus status)
if (status == PHAuthorizationStatusAuthorized)
];
祝你好运!
【讨论】:
我同时拥有Privacy - Photo Library Usage Description
和Privacy - Photo Library Additions Usage Description
(iOS 11 下的新功能)。没有它们,应用程序将简单地崩溃。问题是触发第一个系统弹出窗口。现已在iOS 11下解决。删除应用后系统会再次请求权限。
@bauerMusic 知道了,看来我还没有读完你的问题,就直接回答了。 )) 我应该删除帖子还是仍然有用?
由你决定。我想删除整个帖子(因为它不再相关),但会留下记录。谢谢!以上是关于PHPhotoLibrary 请求授权,不请求的主要内容,如果未能解决你的问题,请参考以下文章