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

时间:2013-01-10 17:07:30

标签: ios objective-c 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;
}

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

然后我在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]);
}];

6 个答案:

答案 0 :(得分:35)

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

您可以转到“设置”应用

  

(一般>重置>重置位置和隐私)。

这将使应用再次询问照片库,位置和其他权限。

答案 1 :(得分:25)

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

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

作为解决方法,我引用Apple有关推送通知的信息:

  

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

     

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

     

如果您想模拟首次运行的应用,可以离开   该应用程序已卸载一天。 你可以在没有的情况下实现后者   实际上等一天通过设置系统时钟一天或   更多,完全关闭设备,然后关闭设备   上

来源:Apple Technical Note TN2265

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以通过两种类型检查此权限 -

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

但首先从设备卸载应用然后重新启动然后应用此内容然后它将起作用。

答案 4 :(得分:0)

如果您使用的是iOS模拟器,则使用模拟器/重置内容和设置... 重置它似乎会重置此设置。当然,您需要重新安装应用程序。

答案 5 :(得分:-3)

您只需按照以下方式点击,无需重新安装或删除应用。

  • 应用程序从后台删除
  • 转到设置 - >常规 - >重置 - >点击重置位置&隐私

希望你能得到帮助。