Just My Life & My Work

又到了必須適配App至最新的iOS 14,iOS SDK每年都有一定程度的大躍進,Apple有意無意讓開發者要不斷往前進,若不與時俱進者,則很快就會被淘汰囉~今年最大的適配項目是隱私權

對於我們家快樂印App來說,這次更新最主要的項目在於相片權限 (Photos Authorization)。乍聽之下沒什麼,不過流程就必須要適當調整,讓用戶能知道相片為何無法被我們App存取。

一旦更新到iOS 14,習以為常的相片權限詢問就會跳出提示,可是此刻的選項變得不一樣!?可讓用戶選擇授權「全部相片」或是「部分相片」,若是選全部相片,一切流程就照舊,那如果選擇部分相片,則App僅能存取用戶選擇的相片。這種規則一開始會讓用戶很不習慣,所以App勢必要做好UI/UX引導用戶。

用文字說明,可能還有用戶不知道要去哪裡設定,那此時可以提供,點擊某處即能到該處設定。

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

想知道用戶先前相片權限選擇何者?下方程式碼可以查到~

/**
 Theme: Photos Authorization
 IDE: Xcode 12
 Language: Objective C
 Date: 109/10/07
 Author: HappyMan
 Blog: https://cg2010studio.com/
 */

   if (@available(iOS 14, *)) {
   	// 查詢權限
        PHAccessLevel level = PHAccessLevelReadWrite;
        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatusForAccessLevel:level];
          switch (status) {
              case PHAuthorizationStatusLimited:
                  NSLog(@"limited");
                  break;
              case PHAuthorizationStatusDenied:
                  NSLog(@"denied");
                  break;
              case PHAuthorizationStatusAuthorized:
                  NSLog(@"authorized");
                  break;
              default:
                  break;
        }
         
        // 請求權限,需注意limited權限在accessLevel為readAndWrite時生效
        [PHPhotoLibrary requestAuthorizationForAccessLevel:level handler:^(PHAuthorizationStatus status) {
          switch (status) {
              case PHAuthorizationStatusLimited:
                  NSLog(@"limited");
                  break;
              case PHAuthorizationStatusDenied:
                  NSLog(@"denied");
                  break;
              case PHAuthorizationStatusAuthorized:
                  NSLog(@"authorized");
                  break;
              default:
                  break;
          }
        }];
    } else {
        // Fallback on earlier versions
    }

iOS14中當用戶選擇「部分相片」時,如果未進行適配,有可能會在每次觸發相簿功能時,都跳出詢問用戶是否需要修改照片權限。

對於這種情況可藉由在Info.plist中設定「PHPhotoLibraryPreventAutomaticLimitedAccessAlert」的值為YES,來阻止該提示反覆跳出,並且可透過下面這個API來主動控制,何時彈出PHPickerViewController進行照片選擇

[[PHPhotoLibrary sharedPhotoLibrary] presentLimitedLibraryPickerFromViewController:self];

若到了最後要把相片上傳,發現照片遺失,此時可以做個提示⋯⋯

可以稍微看一下相簿權限定義如何~

typedef NS_ENUM(NSInteger, PHAuthorizationStatus) {
    PHAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application
    PHAuthorizationStatusRestricted,        // This application is not authorized to access photo data.
                                            // The user cannot change this application’s status, possibly due to active restrictions
                                            //   such as parental controls being in place.
    PHAuthorizationStatusDenied,            // User has explicitly denied this application access to photos data.
    PHAuthorizationStatusAuthorized,        // User has authorized this application to access photos data.
    PHAuthorizationStatusLimited API_AVAILABLE(ios(14)), // User has authorized this application for limited photo library access. Add PHPhotoLibraryPreventAutomaticLimitedAccessAlert = YES to the application's Info.plist to prevent the automatic alert to update the users limited library selection. Use -[PHPhotoLibrary(PhotosUISupport) presentLimitedLibraryPickerFromViewController:] from PhotosUI/PHPhotoLibrary+PhotosUISupport.h to manually present the limited library picker.
};

參考:

隨意留個言吧:)~

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

標籤雲

%d 位部落客按了讚: