21

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]);
}];
4

6 回答 6

36

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

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

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

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

于 2013-12-12T09:09:58.257 回答
26

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

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

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

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

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

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

资料来源:Apple 技术说明 TN2265

于 2013-03-15T01:36:09.020 回答
1

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

于 2015-09-01T15:49:34.190 回答
1

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

  • 在 Simulator
    中,您可以执行Simulator/Reset Content and Settings
  • 在物理设备(iPhone、iPad)
    中您可以更改日期,至少相差 24 小时。

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

于 2016-07-22T10:38:14.670 回答
0

如果您使用的是 iOS 模拟器,使用Simulator/Reset Content and Settings...重置它似乎会重置此设置。当然,您随后需要在其上重新安装您的应用程序。

于 2016-07-05T02:11:21.480 回答
-3

您只需要遵循以下要点,无需重新安装或删除应用程序。

  • 应用从后台移除
  • 转到设置->常规->重置->单击重置位置和隐私

希望你得到帮助。

于 2014-07-03T06:03:56.957 回答