この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
フォトライブラリにアクセスするには、ユーザーから許可を得ている必要があります。
本シリーズの第二回の記事「[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 | ユーザーが、アプリが写真のデータへアクセスすることを許可している |
アプリを初めて起動したタイミングだと、StatusはPHAuthorizationStatusNotDeterminedになっています。
requestAuthorization:メソッド
PHPhotoLibraryのrequestAuthorization:メソッドを使用すると、 フォトライブラリへのアクセスの許可を求めることができます。
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status){
//
}];
許可を尋ねるアラート
許可を尋ねるアラートは、以下の場合などであれば表示されます。
- requestAuthorization:メソッドを初めて使う場合
- モデルオブジェクトを取得するメソッドなどを初めて使う場合
- PHPhotoLibraryの変更要求用のメソッドを使用する場合
アラートが表示されるのは1回だけになっています。 アプリを削除しても、その後はダイアログは表示されませんでした。
許可した場合
StatusがPHAuthorizationStatusAuthorizedになり、 モデルオブジェクトのフェッチや変更を行えるようになります。
許可しなかった場合
StatusがPHAuthorizationStatusDeniedになります。 モデルオブジェクトをフェッチしても空のPHFetchResultが返却されます。
機能制限されている場合
設定で機能制限されている場合は、フォトライブラリにアクセスできません。
設定で機能制限されている場合は、StatusがPHAuthorizationStatusRestrictedになります。 モデルオブジェクトをフェッチしても空のPHFetchResultが返却されます。
まとめ
PHPhotoLibraryのrequestAuthorization:メソッドを使用すると、 フォトライブラリへのアクセスの許可を明示的に求めることができます。 また、authorizationStatusメソッドを使用すると、許可状態を取得できます。
ユーザーがアプリに与える権限は、システム側が記憶し、 ユーザーは設定アプリで権限を変更できます。
参考資料
- Photos Framework Reference
- Introducing the Photos Frameworks - WWDC 2014 Session Videos
本シリーズの記事一覧
- [iOS 8] PhotoKit 1 – Photos Frameworkの概要
- [iOS 8] PhotoKit 2 – Photos Framework – モデルオブジェクトの取得
- [iOS 8] PhotoKit 3 – Photos Framework – モデルオブジェクトのプロパティの編集
- [iOS 8] PhotoKit 4 – Photos Framework – モデルオブジェクトのコンテンツの編集
- [iOS 8] PhotoKit 5 – Photos Framework – モデルオブジェクトの削除
- [iOS 8] PhotoKit 6 – Photos Framework – モデルの変更のハンドリングとコンテンツ編集のrevert
- [iOS 8] PhotoKit 7 – Photos Framework – フォトライブラリへのアクセス許可を得る
- [iOS 8] PhotoKit 8 - UIImagePickerControllerとPhotos Frameworkを組み合わせて使う
- [iOS 8] PhotoKit 9 – Photo Editing Extensionの概要
- [iOS 8] PhotoKit 10 – Photo Editing Extensionの実装 (前篇)
- [iOS 8] PhotoKit 11 – Photo Editing Extensionの実装 (後篇)