iOSアプリで写真を保存する際のプライバシーに関して

写真を保存するiOSアプリはどうあるべきか?っていう話ではなくて、
実装上、あれこれしないとアプリで写真を保存できないっていう話です。

結論からいうと、info.plistにプライバシー設定を追加します。

すると、アプリをインストールしてから最初の保存時に、
アルバムに写真を保存する旨とValue(*1)に記述した文字列が表示され、
そこで許可すれば保存に成功するし、拒否されれば失敗します。
この設定は、

設定 > プライバシー > 写真 > (アプリ名)

で変更できるので、途中で変更される場合もあるし、
最初に拒否されたら拒否されたままになるので、
以降は保存しようとしても失敗し続けます。

そこで、拒否されている状況では保存させないで、
上記の手順で許可するように促したいと考えました。
それでいろいろ調べていて、見つけたのがこちら。

PHPhotoLibrary.authorizationStatusでWrite-onlyの時に取得できなかった
https://www.slideshare.net/tattakata/phphotolibraryauthorizationstatus

さっきの手順で写真のプライバシーを見ると、以下の3種類が存在します。
(人によっては、1種類とか2種類かも。)

  1. 読み出しと書き込み
  2. 写真のみ追加
  3. 許可しない

で、こないだリリースしたChaoticは、
「写真のみ追加」と「許可しない」の2つから選べるのですが、
上記のスライドで書いてある内容を、Chaoticに当てはめるとこんな感じ。

iOS11で、「写真のみ追加」の許可を必要とするChaoticにおいて、
PHPhotoLibrary.authorizationStatus()で返ってくる値は、
アプリのインストール直後も、ユーザーが許可/拒否済みでも、
ユーザーがまだ許可/拒否を選択していない場合に返ってくる、
PHAuthorizationStatus.notDeterminedのまま。

つまり、拒否されているか事前に知ることができない。

と言う訳なので、以下のように実装しました。
保存完了時に、一度でも保存したかどうかのフラグをアプリの設定として保存。
保存エラー時に上記のフラグが立っていたら、
元々取得できるエラーメッセージに、プライバシー設定の変更方法を追加して表示。

めでたし、めでたし。

(*1) ChaoticではValueを空欄にしておいて、ローカライズしています

Leave a Comment