iOS停止向用户询问照片库权限

Luc*_*ien 21 objective-c ios alassetslibrary

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;
}
Run Code Online (Sandbox Code Playgroud)

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

然后我在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]);
}];
Run Code Online (Sandbox Code Playgroud)

jce*_*ile 35

由于问题是照片库权限,还有其他方法,无需更改系统时钟和关闭设备.

您可以转到"设置"应用

(常规>重置>重置位置和隐私).

这将使应用再次要求提供照片库,位置和其他权限.

  • 这对我有用,我需要重置访问照片库的权限,这是一个快速的解决方案.当然,这意味着必须确认我为其他应用程序做出的选择,但它确实有效. (2认同)

Dan*_*iel 26

发生的事情是iOS正在保存授予您的应用程序映射到捆绑包ID的权限,如果删除该应用程序此数据会持续24小时,这可以避免在用户重新安装应用程序时重新提示用户(可能在错误地删除应用程序后) .

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

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

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

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

如果您想模拟首次运行的应用,可以将应用程序卸载一天.通过将系统时钟向前设置一天或更长时间,完全关闭设备,然后重新打开设备,您可以实现后者而无需实际等待一天.

资料来源:Apple Technical Note TN2265

  • 这太hacky了......我喜欢它。 (2认同)