カレンダー・リマインダーにアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法
公開日:
:
最終更新日:2012/12/19
iOSアプリ開発
記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
こんにちは。アキオ(@akio0911)です。
アプリからiOSのカレンダー情報にアクセスするためには、まずユーザーから許可を得る必要があります。
そこで、先日のアドレス帳にアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法に引き続き、今日はカレンダーにアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法を解説したいと思います。
関連 : アドレス帳にアクセスしているアプリをiOS 6のプライバシー設定に対応させる方法
関連 : iOSのEventKitでiPhoneのカレンダー情報を読み取る方法
authorizationStatusForEntityType:メソッド
+ (EKAuthorizationStatus)authorizationStatusForEntityType:(EKEntityType)entityType
EKEventStoreのauthorizationStatusForEntityType:メソッドを呼び出すと、ユーザーがアプリに対してカレンダー・リマインダーへのアクセスを許可しているのか拒否しているのかを確認することができます。
返り値の値は以下の通りです。
返り値 | 説明 |
---|---|
EKAuthorizationStatusNotDetermined | ユーザーにまだアクセスの許可を求めていない場合 |
EKAuthorizationStatusRestricted | iPhoneの設定の「機能制限」でカレンダー・リマインダーへのアクセスを制限している場合 |
EKAuthorizationStatusDenied | カレンダー・リマインダーへのアクセスをユーザーから拒否されている場合 |
EKAuthorizationStatusAuthorized | カレンダー・リマインダーへのアクセスをユーザーが許可している場合 |
requestAccessToEntityType:completion:メソッド
- (void)requestAccessToEntityType:(EKEntityType)entityType completion:(EKEventStoreRequestAccessCompletionHandler)completion
ユーザーに対して、カレンダー・リマインダーにアクセスする許可を求めます。
ユーザーが「OK」か「許可しない」のどちらかをタップすると、completionに渡したハンドラが呼ばれます。
EKEventStoreRequestAccessCompletionHandlerハンドラ
typedef void (^EKEventStoreRequestAccessCompletionHandler)(BOOL granted, NSError *error);
requestAccessToEntityType:completion:メソッドに渡すハンドラです。
ユーザーが「OK」をタップした場合は、grantedにtrueが入ります。
ユーザーが「許可しない」をタップした場合は、grantedにfalseが入ります。
コード例
コード例を以下に示します。
self.eventStore = [[EKEventStore alloc] init]; EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]; switch (status) { case EKAuthorizationStatusNotDetermined: [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if(granted){ [self fetchEventsAndDisplay]; }else{ } }]; break; case EKAuthorizationStatusDenied: case EKAuthorizationStatusRestricted: [self presentError]; break; case EKAuthorizationStatusAuthorized: [self fetchEventsAndDisplay]; break; default: break; }
あとがき
もし間違いなどありましたら、@akio0911までご指摘頂けると助かります。