iOS停止向用户请求照片库许可

iOS不再向用户请求照片库许可。 即使我从设备上删除了应用程序。 这也发生在模拟器上。

switch ([ALAssetsLibrary authorizationStatus]) { case ALAuthorizationStatusAuthorized: RPMLog(@"authorized"); break; case ALAuthorizationStatusDenied: RPMLog(@"denied"); break; case ALAuthorizationStatusNotDetermined: RPMLog(@"not determined"); break; case ALAuthorizationStatusRestricted: RPMLog(@"restricted"); break; } 

我已经授权,当我第一次安装应用程序。 在此之前,没有其他事件或屏幕要求照片触发用户提示。

然后,我请求SavedPhotos中的numberOfAssets,并获取它没有访问提示:

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) { if (!group) return; UIActionSheet *actionSheet = nil; if (([group numberOfAssets] > 0)) { actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Use last photo taken", nil), NSLocalizedString(@"Choose existing", nil), nil]; } else { actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) destructiveButtonTitle:nil otherButtonTitles:NSLocalizedString(@"Take new photo", nil), NSLocalizedString(@"Choose existing", nil), nil]; } actionSheet.actionSheetStyle = UIActionSheetStyleBlackTranslucent; [actionSheet showFromTabBar:self.tabBar]; [TestFlight passCheckpoint:@"New Look: Tab Bar"]; } failureBlock:^(NSError *error) { NSAssert(!error, [error description]); }]; 

发生了什么事是iOS保存授予您的应用程序映射到捆绑ID的权限,如果应用程序被删除,这个数据持续24小时,这避免了重新安装应用程序的用户,如果他们重新安装应用程序(也许错误地删除应用程序后) 。

推送通知提示也会发生这种情况。

作为一种解决方法,我引用了苹果关于推送通知:

在iOS上重置推送通知权限警报

当推送应用程序第一次注册推送通知时,iOS会询问用户是否希望接收该应用程序的通知。 一旦用户对此警报作出响应,除非设备已恢复或应用程序已卸载至less一天,否则不会再次显示。

如果您想模拟首次运行您的应用,则可以将该应用卸载一天。 您可以实现后者,而无需等待一天,方法是将系统时钟设置为一天或更长时间,完全closures设备,然后重新打开设备

资料来源: 苹果技术说明TN2265

由于问题是图片库的权限,还有其他的方式,而不改变系统时钟,closures设备。

你可以去“设置”应用程序

(通用>重置>重置位置和隐私)。

这将使应用程序再次要求照片库,位置和其他权限。

通过设置应用程序进行rest很难自动化。 我们使用simctl以自动方式重置模拟器内容和设置,以重置权限对话框。 这将需要在模拟器中重新安装应用程序,但simctl可以完成此操作。

如果你正在使用iOS模拟器,使用模拟器/重置内容和设置…重置它似乎重置此设置。 当然,你将需要重新安装你的应用程序。

您可以通过两种types检查此权限 –

  • 在模拟器中
    你可以做模拟器/重置内容和设置
  • 在物理设备(iPhone,iPad)
    你可以改变date,至less差别应该是24小时。

但首先从设备卸载应用程序,然后重新启动,然后应用这个东西,那么它将工作。

你只需要关注下面的点,不需要重新安装或删除应用程序。

  • 应用程序从背景删除
  • 进入设置 – >常规 – > 重置 – >点击重置位置和隐私

希望你能得到帮助。