LoginSignup
1
2

More than 1 year has passed since last update.

[iOS]写真へのアクセスレベル「追加のみ」「閲覧・追加両方」を1アプリ内に混在させる時どうなるか

Last updated at Posted at 2021-05-13

基本事項

iOSアプリの写真(カメラロールなど)へのアクセス許諾についての基本は以下をご覧ください

WWDC2020での許諾周りのアップデートまとめ

簡単にまとめると以下のようになります。

iOS13以前

写真へのアクセス権限は一種類(閲覧・追加両方)しかなく、その許諾ダイアログは二択のダイアログである。
2択ダイアログ.png

許諾の状態をチェックする時はPHAuthorizationStatusを使う。

ユーザーに許諾を得る時はrequestAuthorization(_:)を使う。

許諾ダイアログの文言はNSPhotoLibraryUsageDescriptionが適用される。

iOS14

iOS14では写真へのアクセス権限として「追加のみ」の権限と「閲覧・追加両方」の権限がある。

  • 「追加のみ」の権限を得る時の許諾ダイアログはやはり二択のダイアログとなる。例えば、画像保存機能の時はこれを使う事になる。2択ダイアログ.png

許諾の状態をチェックする時はauthorizationStatus(for: .addOnly)を使う。

ユーザーに許諾を得る時はrequestAuthorization(for: .addOnly)を使う。

許諾ダイアログの文言はNSPhotoLibraryAddUsageDescriptionが適用される。

  • 「閲覧・追加両方」の権限を得る時は、三択のダイアログとなる。例えば、画像アップロード機能の時はこれを使うことになる。 3択ダイアログ.png

許諾の状態をチェックする時はauthorizationStatus(for: .readWrite)を使う。

ユーザーに許諾を得る時はrequestAuthorization(for: .readWrite)を使う。

許諾ダイアログの文言は、iOS13以下と同じでNSPhotoLibraryUsageDescriptionが適用される。

iOS14で「追加のみ」「閲覧・追加両方」を1アプリ内に混在させられるが、するとどうなるか

例えば、1アプリ内に画像保存機能(追加のみ)と画像アップロード機能(閲覧・追加両方)が両方ある場合など。

許諾文言の整理

許諾文言はinfo.plistにNSPhotoLibraryUsageDescriptionNSPhotoLibraryAddUsageDescriptionの二つの固定文言を書いていくことになる。

info.plistの内容をiOSのバージョンが13以下か14以降かによって動的に変えることはできない(はず)なので、全状況をカバーできる文言を入れていくしかない。※もし変える方法を知ってる場合は教えてください・・・

以下のように表で整理するとわかるが、NSPhotoLibraryUsageDescriptionは画像アップロード機能と画像保存機能両方の時に表示されうるので、両方の機能についての説明を入れていかなければならないと考えられる。

一方、NSPhotoLibraryAddUsageDescription はiOS14で画像保存機能を使う時に表示される可能性があるだけであるから、画像保存機能についての説明さえ入っていればいいと考えられる。

画像アップロード機能(閲覧・追加両方) 画像保存機能(追加のみ)
iOS13以前 NSPhotoLibraryUsageDescription NSPhotoLibraryUsageDescription
iOS14 NSPhotoLibraryUsageDescription NSPhotoLibraryAddUsageDescription

iPhoneの「設定」アプリ > 「写真」はどのような設定となるか

ケース1 最初に画像保存機能を使用 -> その後画像アップロード機能を使用

画像保存機能を使う時、requestAuthorization(for: .addOnly)でユーザーに許諾を得る。許諾が得られた場合、iPhoneの「設定」アプリ > 該当アプリ > Photosを見てみると、以下のように追加のみか不許可かの二択になる。
追加のみ.png

その後、画像アップロード機能を使う時、requestAuthorization(for: .readWrite)でユーザーに許諾を得ることになる。iPhoneの「設定」アプリ > 該当アプリ > Photosを見てみると、以下のように「追加のみ」「特定の写真のみ」「全部の写真」「不許可」の四択となる。
設定アプリ > 画像 add onlyを含む.png

ケース2 最初に画像アップロード機能を使用 -> その後画像保存機能を使用

最初requestAuthorization(for: .readWrite)でユーザーに許諾を得ることになる。許諾を得られると、設定アプリでは「特定の写真のみ」「全部の写真」「不許可」の三択となる。
設定アプリ > 画像 add onlyを含まない.png

その後、画像保存機能を使う時は、すでに閲覧・追加両方の権限が得られていることから、改めてユーザーに許諾を得る必要はないから、そのまま画像保存機能が使えることになる。

最終的に、順番によって「設定」の「写真」の選択肢が3つと4つで異なってくることになり、少し気持ち悪いが・・・

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2