iOSアプリで写真を保存する際のプライバシーに関して
写真を保存するiOSアプリはどうあるべきか?っていう話ではなくて、
実装上、あれこれしないとアプリで写真を保存できないっていう話です。
結論からいうと、info.plist
にプライバシー設定を追加します。
すると、アプリをインストールしてから最初の保存時に、
アルバムに写真を保存する旨とValue(*1)に記述した文字列が表示され、
そこで許可すれば保存に成功するし、拒否されれば失敗します。
この設定は、
設定 > プライバシー > 写真 > (アプリ名)
で変更できるので、途中で変更される場合もあるし、
最初に拒否されたら拒否されたままになるので、
以降は保存しようとしても失敗し続けます。
そこで、拒否されている状況では保存させないで、
上記の手順で許可するように促したいと考えました。
それでいろいろ調べていて、見つけたのがこちら。
PHPhotoLibrary.authorizationStatusでWrite-onlyの時に取得できなかった
https://www.slideshare.net/tattakata/phphotolibraryauthorizationstatus
さっきの手順で写真のプライバシーを見ると、以下の3種類が存在します。
(人によっては、1種類とか2種類かも。)
- 読み出しと書き込み
- 写真のみ追加
- 許可しない
で、こないだリリースしたChaoticは、
「写真のみ追加」と「許可しない」の2つから選べるのですが、
上記のスライドで書いてある内容を、Chaoticに当てはめるとこんな感じ。
iOS11で、「写真のみ追加」の許可を必要とするChaoticにおいて、
PHPhotoLibrary.authorizationStatus()
で返ってくる値は、
アプリのインストール直後も、ユーザーが許可/拒否済みでも、
ユーザーがまだ許可/拒否を選択していない場合に返ってくる、
PHAuthorizationStatus.notDetermined
のまま。
つまり、拒否されているか事前に知ることができない。
と言う訳なので、以下のように実装しました。
保存完了時に、一度でも保存したかどうかのフラグをアプリの設定として保存。
保存エラー時に上記のフラグが立っていたら、
元々取得できるエラーメッセージに、プライバシー設定の変更方法を追加して表示。
めでたし、めでたし。
(*1) ChaoticではValueを空欄にしておいて、ローカライズしています
Leave a Comment