簡體   English   中英

iOS停止向用戶詢問照片庫權限

[英]iOS stopped asking user for Photo Library Permission

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小時,這樣可以避免在用戶重新安裝應用程序時重新提示用戶(可能是在錯誤地刪除了應用程序之后) 。

推送通知提示也會發生這種情況。

作為一種解決方法,我引用Apple關於推送通知:

重置iOS上的推送通知權限警報

第一次啟用推送的應用程序注冊推送通知時,iOS會詢問用戶是否希望接收該應用程序的通知。 一旦用戶響應此警報,除非設備已恢復或應用程序已卸載至少一天,否則不會再次顯示該警報。

如果您想模擬首次運行的應用,可以將應用程序卸載一天。 通過將系統時鍾向前設置一天或更長時間,完全關閉設備,然后重新打開設備,您可以實現后者而無需實際等待一天

資料來源: Apple Technical Note TN2265

通過設置應用程序休息很難自動化。 我們使用simctl以自動方式重置模擬器內容和設置以重置權限對話框。 這將需要在模擬器中重新安裝應用程序,但simctl可以再次完成此操作。

您可以通過兩種類型檢查此權限 -

  • 在模擬器中
    你可以做模擬器/重置內容和設置
  • 在物理設備(iPhone,iPad)
    你可以改變日期,至少差異應該是24小時。

但首先從設備卸載應用程序然后重新啟動然后應用此東西然后它將工作。

如果您使用的是iOS模擬器,則使用模擬器/重置內容和設置重置它...似乎重置此設置。 當然,您需要重新安裝應用程序。

你只需要按照下面的點,不需要重新安裝或刪除應用程序。

  • 應用程序從后台刪除
  • 轉到設置 - >常規 - > 重置 - >單擊重置位置和隱私

希望你能得到幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM