iPhoneアプリ開発 −iOS6からの「写真」へのアクセス問題−
※結構前の話を今更まとめてみる。
写真へのアクセス周りについて
iOS5まで
写真を扱うときによく使うフレームワーク「AssetsLibrary」。
これを利用している際に、「位置情報サービス」でオンになっている必要がありました。
iOS6から
「位置情報サービス」は「プライバシー」に統合されました。
「AssetsLibrary」を使っても、「位置情報サービス」については問われません。
代わりに「写真」にアクセスする許可のダイアログが表示されるようになりました。
※「AssetsLibrary」を使わなくても、「写真」にアクセスする場合はダイアログが表示されます。
問題点
アプリが「写真」へのアクセスをした際に表示されるダイアログ。
このダイアログで「いいえ」を選択してしまうとアプリが使えなくなってしまいます。
ただし、「写真」へのアクセスなので写真系のアプリでよくあるカメラ起動に関しては、(何も対処をしてなければ)起動してしまいます。
つまり、「カメラ起動」→「写真撮影」→「編集画面」という流れをしたくても編集画面に遷移するところでアクセスがNGになり動かなくなります。
ユーザが間違えて「いいえ」を教えてしまうケースはよくあるかと思います。
そこで、「写真」へのアクセスが不許可にされている際はアラートを表示させてユーザに気づいてもらうようにします。
対応方法
現在の状態を確認し、もし「いいえ」にしていたらアラートを表示させます。
(1)フレームワークの追加
「TARGETS」の「Build Phases」の「Link Binary With Libraries」でAssetsLibrary.frameworkを追加する。
(2)状態の確認
以下のコードで現在の状態が分かります。
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
状態は以下。
ALAuthorizationStatusNotDetermined
まだ選択していない。
ALAuthorizationStatusRestricted
機能制限(ペアレンタルコントロール)で許可されていない。
参考:iOS:機能制限 (ペアレンタルコントロール) について理解する – Apple サポート
ALAuthorizationStatusDenied
「写真」へのアクセスを許可していない。
ALAuthorizationStatusAuthorized
「写真」へのアクセスを許可している。
(3)アラートの表示
そこで「写真」へアクセスする必要がある箇所で状態をチェックします。
if([ALAssetsLibrary respondsToSelector:@selector(authorizationStatus)]) { ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus]; if(status == ALAuthorizationStatusDenied) { //アラート表示 } }
※authorizationStatusはiOS6からであってiOS5では使えないので、respondsToSelectorで使えるかを確認します。
これで、ユーザにアラートを表示させて「写真」へのアクセスを許可するようお願いすることができます。
参考
広告
関連記事
-
CakePHP1.3でテストコード(1) -モデルのテスト-
CakePHP1.3ではSimpleTestを用いてテストコードを書きます。 ※CakePHP2系で
-
CAPTCHAの導入方法 -KCAPTCHAの導入-
CakePHP(1.2、1.3)にKCAPTCHAを導入してみたのでメモ。 * CAPTCHA
-
iPhoneアプリを開発してての疑問 -教えてエライ人!-
MacでiPhoneアプリを開発してて疑問に思ったのの解決してないことを列挙。 知識不足をさらけ出し
-
TwitterAPI 1.1対応で困ったこと −フォロー・フォロワー一覧取得−
TwitterのAPI1.1に2013年の3月15日までには対応しないといけません。
-
PhoneGapを触ってみた(3) -画像を扱う(Camera APIを使ってみる)-
今回は、PhoneGapのCamera APIを使って携帯のアルバムにある画像を扱ってみます。
-
TestLink1.91のバグの修正方法
どうやらTestLink1.91にはバグがあるようなので、修正方法を以下に記述。 Test
-
「Google Apps」無償版の新規登録が終了
以前、「Google Apps」を利用した以下の記事を書きましたが、とうとう無償版の新規登録が終了
-
jQuery Mobile1.2のPopupを試してみた -写真を表示-
jQuery Mobile1.2の「Popup」を試してみました。 他の機能である「Collaps
-
Jenkins+Capistranoを設定した時にしたこと -「ポート変更」「公開鍵認証」対応-
* 前段階 上記にあるように、Jenkins+Capistranoの設定をしています。 ただし、設
-
第二回Androidテスト祭り参加記録 -祭りに参加してきたよ-
久しぶりに勉強会に参加してきました。 参加してきたのは「第二回Androidテスト祭り(4/28)