iOS6では、設定.appにプライバシーという項目が追加され、”写真”(フォトライブラリへの保存や読み込み)や”連絡先”などにアクセスする時に、
許可のダイアログが表示され、”いいえ”を選択した際はそれらへのアクセスが出来ないようになっています。

ユーザーが”写真”へのアクセスを許可したかどうかを判定するには、AssetsLibrary.frameworkの+ (ALAuthorizationStatus)authorizationStatusを使って判定することができます。

AssetsLibrary.frameworkを追加して、[ALAssetsLibrary authorizationStatus]を行うと現在の状態が取得できます。


ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];

ALAuthorizationStatusは4つの状態があり、ALAuthorizationStatusDeniedが許可ダイアログでいいえを押している場合に返ってきます。


/*
    typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
        ALAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application
        ALAuthorizationStatusRestricted,        // 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.
        ALAuthorizationStatusDenied,            // User has explicitly denied this application access to photos data.
        ALAuthorizationStatusAuthorized         // User has authorized this application to access photos data.
    } __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_6_0);
     */

    NSString *labelText = nil;
    if (status == ALAuthorizationStatusNotDetermined){
        labelText = @"まだ許可ダイアログ出たことない";
    } else if (status == ALAuthorizationStatusRestricted){
        labelText = @"機能制限(ペアレンタルコントロール)で許可されてない";
    } else if (status == ALAuthorizationStatusDenied){
        labelText = @"許可ダイアログで\"いいえ\"が押されています\n"
            "設定アプリ -> プライバシー > 写真 -> 該当アプリを\"オン\"する必要があります";
    } else if (status == ALAuthorizationStatusAuthorized){
        labelText = @"写真へのアクセスが許可されています";
    }

という感じです。

扱い方は基本的にGPSの+ (CLAuthorizationStatus)authorizationStatusやEventKitの+ (EKAuthorizationStatus)authorizationStatusForEntityType:(EKEntityType)entityTypeなどと同様です。

[ALAssetsLibrary authorizationStatus]を表示する簡単なサンプルを作ってみました
プライバシーの許可は実機じゃないと上手く動いてない気がするので、実機で試す必要がありそうです。

NewImage

アクセスが許可されていない場合、UIImagePickerControllerでは次のような表示が出ますが、
あまり親切ではないので、アクセスがオフとなってるユーザーには何らかの注意を表示したほうがいいかもしれないですね。

Skitched 20121017 150250

ちなみにUIImagePickerControllerでフォトライブラリが使用可能なのかをisSourceTypeAvailable:で判定できますが、
これはプライバシーの許可に関係なくフォトライブラリが使えるかの判定なので、許可で”いいえ”の場合でもYESを返します。


[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];

参考

追記

許可ダイアログに表示する説明文はinfo.plistにNSPhotoLibraryUsageDescriptionをキーに値を設定することで変更できます。

NewImage

他の許可ダイアログも同様の方法で説明文を書くことができます。
詳細は下記のサイトに

Post Navigation