[iOS 8] PhotoKit 7 – Photos Framework – フォトライブラリへのアクセス許可を得る

はじめに

フォトライブラリにアクセスするには、ユーザーから許可を得ている必要があります。

本シリーズの第二回の記事「[iOS 8] PhotoKit 2 – Photos Framework – モデルオブジェクトの取得」で モデルオブジェクトを取得するメソッドを紹介しましたが、これらのメソッドなどを初めて使うタイミングで、 自動的に許可を尋ねるアラートが表示されます。

今回は明示的に許可を求めたり、許可の状態を確認する方法を紹介します。

PHAuthorizationStatus

PHPhotoLibraryのauthorizationStatusメソッドを使用すると、PHAuthorizationStatus型のStatusが取得できます。

PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch (status) {
    case PHAuthorizationStatusNotDetermined:
        // ユーザーはまだ、このアプリに与える権限を選択をしていない

        break;
        
    case PHAuthorizationStatusRestricted:
        // PhotoLibraryへのアクセスが許可されていない
        // parental controlなどで制限されていて、ユーザーはアプリのアクセスの許可を変更できない

        break;
        
    case PHAuthorizationStatusDenied:
        // ユーザーが明示的に、アプリが写真のデータへアクセスすることを拒否した
 
        break;
        
    default:
    case PHAuthorizationStatusAuthorized:
        // ユーザーが、アプリが写真のデータへアクセスすることを許可している

        break;
}

PHAuthorizationStatusのそれぞれの定義は以下の通りです。

内容
PHAuthorizationStatusNotDetermined ユーザーはまだ、このアプリに与える権限を選択をしていない
PHAuthorizationStatusRestricted PhotoLibraryへのアクセスが許可されていない(parental controlなどで制限されている)
PHAuthorizationStatusDenied ユーザーが明示的に、アプリが写真のデータへアクセスすることを拒否した
PHAuthorizationStatusAuthorized ユーザーが、アプリが写真のデータへアクセスすることを許可している

ios8-photo-kit-7_0

アプリを初めて起動したタイミングだと、StatusはPHAuthorizationStatusNotDeterminedになっています。

requestAuthorization:メソッド

PHPhotoLibraryのrequestAuthorization:メソッドを使用すると、 フォトライブラリへのアクセスの許可を求めることができます。

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status){
		//
		
    }];

許可を尋ねるアラート

ios8-photo-kit-7_1

許可を尋ねるアラートは、以下の場合などであれば表示されます。

  • requestAuthorization:メソッドを初めて使う場合
  • モデルオブジェクトを取得するメソッドなどを初めて使う場合
  • PHPhotoLibraryの変更要求用のメソッドを使用する場合

アラートが表示されるのは1回だけになっています。 アプリを削除しても、その後はダイアログは表示されませんでした。

許可した場合

ios8-photo-kit-7_2

StatusがPHAuthorizationStatusAuthorizedになり、 モデルオブジェクトのフェッチや変更を行えるようになります。

許可しなかった場合

ios8-photo-kit-7_5

StatusがPHAuthorizationStatusDeniedになります。 モデルオブジェクトをフェッチしても空のPHFetchResultが返却されます。

機能制限されている場合

ios8-photo-kit-7_7

設定で機能制限されている場合は、フォトライブラリにアクセスできません。

ios8-photo-kit-7_6

設定で機能制限されている場合は、StatusがPHAuthorizationStatusRestrictedになります。 モデルオブジェクトをフェッチしても空のPHFetchResultが返却されます。

まとめ

PHPhotoLibraryのrequestAuthorization:メソッドを使用すると、 フォトライブラリへのアクセスの許可を明示的に求めることができます。 また、authorizationStatusメソッドを使用すると、許可状態を取得できます。

ユーザーがアプリに与える権限は、システム側が記憶し、 ユーザーは設定アプリで権限を変更できます。

参考資料

本シリーズの記事一覧