60
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-08-10

概要

今年はプライバシー、権限周りで多くのアップデートがあったのでまとめてみます。

この記事は以下のWWDC 2020セッション動画、及び公式ドキュメントを元に書いています(ここで出てくるスクショも動画のものです)。
周辺知識も含めて深く知りたい方はご参考までに。

なお、IDFAに関してはすでに多くの記事が出ているので省きます。

所感

今までよりいっそう、「必要な分だけの権限をもらう」感が強くなった

背景

  • アプリがアクセスできる情報量とユーザ体験のバランスを取りやすくしたい
  • iOS 13までは許諾アラートが出てきたらYesと答えないとアプリのコア機能を使えないこともあった

写真

写真共有アプリの例

iOS 13の場合、写真ライブラリ全体へのアクセス権限を求めることになる。

iOS 14からはLimited Photos Libraryが使えるようになり、ユーザが選択した写真しかアプリからアクセスできない状態を作ることができる。ちなみにフォーラムの回答によると、「選択した写真のみ」の選択肢はオプトアウトできないとのこと。さらに、今回の変更は、新しいAPIや機能を採用していないアプリでも、iOS 14端末だったら影響を受けてしまう。

「Select Photos」を選択するとこのようなピッカー(PHPickerViewController)が表示される。このときピッカーは別プロセスで起動されており、選択し終わった写真しか知ることができない。

PHPicker

PHPickerUIImagePickerControllerに置き換わる新しいフレームワーク。PHPickerには検索機能、複数選択機能などを備わっている。加えて、写真ライブラリへのアクセス権を必要としないので、許諾アラートを表示する必要もない。アプリがすべての写真にアクセスする必要がない限りPHPickerを使うことが推奨されている。

アクセスレベル

ステータスは既存のものに加え、.limitedステータスが増えている。→PHAuthorizationStatus
これとは別にiOS 14からはPHAccessLevelというアクセスレベルを指定するenumが登場した。.addOnlyを指定した場合は左、.readWriteを指定した場合は右の許諾アラートになる。
スクリーンショット 2020-08-09 22.49.41.png

今までのステータス確認APIには更新が入り、アクセスレベルの指定が必要になっている。ユーザが.limitedになっているかどうかは以下のように確認する。
スクリーンショット 2020-08-09 23.10.18.png
許諾リクエスト処理は、ステータス問い合わせと同じようにアクセスレベルを指定する。これにより許諾アラートが表示されるようになる。
スクリーンショット 2020-08-09 23.21.55.png

従来のAPIは将来的に非推奨なAPIになる。従来のAPIのままだと、ユーザが「選択した写真のみ」で許可した場合、.limitedではなく.authorizedを返してしまう。
基本的には.authorized.limitedでは同じように動くべきだが、.limitedではユーザのアルバムを作成、取得できなかったり、クラウド上のコンテンツやアルバムにアクセスできなかったりするので注意が必要。

許諾範囲の変更

設定アプリから変更することができる。
スクリーンショット 2020-08-09 21.34.05.png
新しいAPIに何も対応を入れていないアプリで、ユーザが「選択した写真のみ…」にした場合は、アプリのライフサイクルごとに一度、PhotoKitのコンテンツにアクセスする時に、現在の選択範囲を維持するか、変更するかを問うアラートが出てくる。
スクリーンショット 2020-08-09 21.40.16.png
選択UIを手動で表示させて許諾範囲を変更する方法もある。
スクリーンショット 2020-08-10 12.02.24.png
ある記事によると、フォトライブラリへのフルアクセスを必要とするアプリは、ステータスが.limitedの場合、この選択UIを表示させるためのボタンを表示しないといけないといけないと書いているが、それに該当しそうな公式文章は見つけられなかった。

許諾アラートを毎回表示させないためには

PHPhotoLibraryPreventAutomaticLimitedAccessAlertinfo.plistに書いておけば、アクセスの拡張を促すアラートが自動で出てくることはなくなる。

位置情報

近くにいる人に写真を送るアプリの例

写真を共有したい友達を見つけるために位置情報を使用するアプリを考える。iOS 13では以下の許諾アラートだった。

iOS 14ではおおよその位置情報だけをアプリと共有できる機能が追加される。Precise設定をOFFにすると、おおよその位置情報の更新のみアプリに通知される。

ユーザは設定アプリから設定を変更することもできる。
スクリーンショット 2020-08-09 17.39.30.png

Apple Mapsの例

Apple Mapsでは「おおよその位置情報の共有」を選択した人には、アプリ起動時にマップ上部に目立つボタンを表示している。このボタンをタップすると許諾アラートが表示される。
スクリーンショット 2020-08-09 15.28.33.png
ユーザがアプリ内を回遊し始めるとこのボタンは目立たなくなる。
スクリーンショット 2020-08-09 17.21.22.png

App clips

App clipのユースケースに特化して新しい位置情報アクセスが設計された。App clipsでは正確な位置情報へのアクセスを行わなくても、例えば間違った店舗のウェイティングリストに入ってないかなどの確認はできる。App clipsが特定の場所で起動されたかどうかをシステムに尋ねる程度なら、許諾アラートを出す必要はない。

許諾状況の確認

「いつ」「どの程度」という2軸で許諾状況を確認することができる。
スクリーンショット 2020-08-09 17.53.12.png

一時的に正確な位置情報をリクエストする

もし正確な位置情報を必要とする機能があるアプリで、ユーザがおおよその位置情報しか共有していない場合は、ユーザに一時的に許諾のアップデートを依頼することができる。
スクリーンショット 2020-08-10 22.42.20.png
実装としては以下の通り。
スクリーンショット 2020-08-11 9.21.41.png
一時的に正確な位置情報を求める理由はinfo.plistNSLocationTemporaryUsageDescriptionDictionaryに書いておく。
スクリーンショット 2020-08-11 9.22.08.png

連絡先

写真共有アプリの例

手動で共有したい友達を選ぶために連絡先情報を使用するアプリを考える。iOS 13までは以下の許諾アラートが出るケースもあった。

とはいえCNContactPickerViewControllerを使っていれば特に許諾を取ることなく連絡先データへのアクセスが可能だった。
iOS 14からは、TextFieldに特定のtextContentTypeを指定していた場合、QuickTypeバーに連絡先データベースから取ってきた情報がサジェストされるようになる。

スクリーンショット 2020-08-10 23.05.00.png

NearbyInteraction

NearbyInteractionフレームワークを使うときはBluetoothやネットワークアクセスの使用許可をとる必要はない。その代わり、アプリは1回限りのセッションベースのアクセスを要求する。あるユーザのデバイスと、その近くにいる別のデバイスの両方が許可をしたら、デバイス間がどれくらい離れているのか、どの方向にいるのかなどを知ることができる。この許可は、アプリがフォアグラウンドで使用され続けている限り有効になっている。
スクリーンショット 2020-08-09 15.10.07.png

60
42
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
60
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?