2016年8月11日木曜日

PHPhotoLibrayのrequestAuthorizationでプロンプトが表示されない

PHPhotoLibrayの

+ (void)requestAuthorization:(void (^)(PHAuthorizationStatus status))handler
でアクセス許可を要求するプロンプトが表示されない。

どうやらiOS9から発生しているようです。

Info.plistにCFBundleDisplayNameを設定すれば表示されるようになると書かれているページが見つかりますが、これでもダメ。

正式ドキュメントではないようでが、一旦ユーザが設定した後はプロンプトを表示しないとのこと。

別のことで、1日一回だけチェックするので、テスト時に時計を進めろ、というものがあったので、試しに時計を進めてみたらプロンプトが表示されるようになった。

デバッグ中の場合の手順

  1. XCodeでのデバッグを終了させる。
  2. 設定で、対象アプリの写真へのアクセスをオフにする。
  3. 対象アプリをアンインストール(削除)する。
    時計を進めるだけではダメ。再検証していないが、日付を変えた後でアンインストールしてもうまくいかなった。
  4. 設定 > 一般 > 日付と時刻 で日付を1日進める。
    自動設定をオフにす。
    一旦設定すると設定した日時が記録されるようで、何度もテストする場合はその度にさらに1日進める必要がある。
  5. XCodeでデバッグを開始する。


requestAuthorization実行で写真へのアクセスを要求するプロンプトが表示される。

このプロンプトは非同期で実行され、プロンプトを閉じたことがわからないので、アプリ側で何らかの再実行手段を講じる。
もしかしたら、何らかの通知機能があるかもしれない。

プロンプトでOKをタップした場合は正常処理を進めることができるが、キャンセルがタップされた場合は写真へのアクセスが禁止されたままの状態となる。この状態で再度requestAuthorizationを実行しても(おそらく24時間経過するまでは)プロンプトは再度表示されない。そのため、設定で写真へのアクセスを許可するように、ユーザに知らせる必要がある。

また、iOS10からinfo.plistにNSPhotoLibraryUsageDescriptionを設定しておかないとエラーが発生するので、これも設定しておく。

0 件のコメント: