ハイライト
iOS 14 では、PhotoKit に限定された写真ライブラリが追加されます。ユーザーは選択した写真とビデオのみを承認できます。アプリは、新しい認証ステータス、アクセス レベル、管理 UI を通じて、限られた写真ライブラリに適応する必要があります。
主要内容
これまで、多くのアプリでは、ユーザーがアバターをアップロードしたり、写真を送信したり、ドキュメントに写真を挿入したりすることのみが必要でしたが、写真ライブラリ全体の許可要求がポップアップ表示されていました。ユーザーが同意すると、アプリは PhotoKit を通じて実質的に写真ライブラリ全体を参照します。個人の写真ライブラリには、多くの場合、数万、さらには数十万の写真やビデオが含まれていることが多く、これは多くの機能が実際に必要とする量をはるかに超えています。
iOS 14 では、この権限モデルに限定された写真ライブラリが追加されます。ユーザーは、[写真の選択] を選択し、システム インターフェイスでアプリがアクセスを許可されている写真とビデオを選択できます。アプリの場合、この選択は PhotoKit API のフィルターのように機能します。PHAsset.fetchAssetsユーザーが選択したリソースのみを返すことができ、関連するメタデータはこれらのリソースに限定されます。
この変更は、新しい API をまだ採用していないすでにリリースされているアプリを含む、PhotoKit を使用するすべてのアプリに影響します。適応していないアプリが初めて PhotoKit 経由でリソースを取得すると、システムはアプリのライフサイクルごとに 1 回、ユーザーが現在の選択を保持または変更できるようにするプロンプトを表示します。適応後、アプリは管理インターフェイスをいつ表示するか、写真の閲覧、インポート、または設定ページに入り口を配置するかを決定できます。
Apple の移行の方向性は明確です。アバターのアップロード、チャットへの写真の投稿、ドキュメントのイラストなどの 1 回限りの選択プロセスについては、新しいものを最初に使用する必要があります。PHPickerViewControllerフォトギャラリーにアクセスする必要がないためです。写真の閲覧、編集、カメラ、バックアップなど、写真ライブラリを核とするアプリのみが、制限された状態で UI、認証クエリ、リソースの変更を慎重に処理する必要があります。
詳細
制限付き認可ステータスのクエリ
(08:36) iOS 14 のメリットPHAuthorizationStatus追加した.limited、と追加しますPHAccessLevel。 Limited は読み取りおよび書き込みアクセスにのみ影響するため、クエリ時に渡す必要があります。.readWrite、戻り値が次であるかどうかを確認します。.limited。
import Photos
let accessLevel: PHAccessLevel = .readWrite
let authorizationStatus = PHPhotoLibrary.authorizationStatus(for: accessLevel)
switch authorizationStatus {
case .limited:
print("limited authorization granted")
default:
//FIXME: Implement handling for all authorizationStatus values
print("Not implemented")
}
キーポイント:
PHAccessLevel区別する.addOnlyそして.readWrite、写真のアクセス許可の 2 種類のアクセス (追加、読み取り、書き込み) に対応します。- 限定ステータスを確認したい場合の使用例
.readWrite制限されたライブラリは追加専用アクセスに影響を与えないためです。 authorizationStatus(for:)は、アクセス レベルを認識する新しいクエリ API です。- 互換性上の理由から、古い認証ステータス API は返されません。
.limited;ユーザーが限定的なフォト ライブラリへのアクセスを許可すると、古い API は依然として承認された状態を返します。
読み取りおよび書き込みアクセスをリクエストする
(09:43) 承認をリクエストすると、アクセス レベル パラメータも追加されます。講演では、ユーザーが写真をインポートしたり、フォトアルバムを読んだり、カメラロールに保存したりするためにクリックしたときに許可リクエストをトリガーするなど、ユーザー操作によって許可リクエストを実行できるようにして、システムポップアップをユーザーの現在のタスクに合わせることを提案した。
import Photos
let requiredAccessLevel: PHAccessLevel = .readWrite
PHPhotoLibrary.requestAuthorization(for: requiredAccessLevel) { authorizationStatus in
switch authorizationStatus {
case .limited:
print("limited authorization granted")
default:
//FIXME: Implement handling for all authorizationStatus
print("Unimplemented")
}
}
キーポイント:
requestAuthorization(for:)システム許可リクエストは、許可ステータスがまだ決定されていない場合にのみポップアップ表示されます。- コールバック内
authorizationStatusユーザーが行った選択が反映されます。 .limitedユーザーが制限付きの写真ライブラリへのアクセスを許可していることを示します。アプリは UI を調整して、現在選択された写真とビデオのみが表示されていることをユーザーに知らせる必要があります。- 制限モードでは、ほとんどの PhotoKit API は完全な認証と同じように動作しますが、表示されるリソース範囲はユーザーの選択によってフィルターされます。
制限モードでリソース境界を処理する
(10:57) この講演では、いくつかの意図的な例外が列挙されています。アプリによって新しく作成されたアセットは、アプリの限定された選択肢に自動的に追加されます。ユーザーアルバムをキャプチャまたは作成することはできません。クラウド共有アセットと共有アルバムにもアクセスできません。アプリ固有のフォト アルバムに依存する製品は、その動作を調整する必要があります。
キーポイント:
- 新しい写真を保存する機能は引き続き利用可能で、新しく作成されたアセットは現在のアプリの表示される選択に入ります。
- 既存のプロセスがユーザー アルバムの作成に依存している場合、このデザインは制限付きモードで引き続き使用できません。
- 共有写真リソースは表示されず、バックアップ、整理、集計アプリは UI で欠落している範囲を説明する必要があります。
PHPhotoLibraryChangeObserverユーザーはシステム設定、管理インターフェイス、または iCloud 同期シナリオで表示されるリソースを変更する可能性があるため、依然として重要です。
管理インターフェイスをアクティブに表示する
(12:04) 制限付きモードに適応した後、アプリを使用できるようになりますpresentLimitedLibraryPicker(from:)システム管理インターフェイスをアクティブに表示します。講演では、写真閲覧ページへの管理者エントリなど、文脈上明確なボタンやアクションにそれを結び付けることが提案されています。
import PhotosUI
let library = PHPhotoLibrary.shared()
let viewController = self
library.presentLimitedLibraryPicker(from: viewController)
キーポイント:
PHPhotoLibrary.shared()共有フォト ライブラリ オブジェクトを取得します。viewControllerここに管理インターフェイスが表示されます。presentLimitedLibraryPicker(from:)システムの限定された写真ライブラリ管理 UI が開き、ユーザーは現在のアプリにアクセスできる写真やビデオを追加または削除できるようになります。- この入口を使用した後、Info.plist で写真アクセス制限アラートを設定して、アプリが初めて PhotoKit API を呼び出すときにシステムが管理プロンプトを自動的にポップアップ表示しないようにすることができます。
重要ポイント
-
制限された写真ライブラリのステータス バーを作成します: 写真閲覧ページの上部に現在の制限されたアクセスを表示し、管理アクセスを提供します。価値がある理由: ユーザーが数枚の写真だけを選択した場合、空白のグリッドはアプリの読み取りエラーとして誤解されやすくなります。開始方法: 使用する
PHPhotoLibrary.authorizationStatus(for: .readWrite)診る.limited、次に使用しますpresentLimitedLibraryPicker(from:)システム管理インターフェイスを開きます。 -
アバターのアップロードを PHPicker プロセスに変更: アバター、カバー、チャット写真などの単一選択機能には、PhotoKit の読み取りおよび書き込み権限が必要なくなりました。実行する価値がある理由: セッションでは、ユーザーが写真ライブラリへの完全なアクセスを許可しなくても、PHPicker を使用してこれらの機能を実行できることが明示されています。開始方法: 古いアクセス許可リクエストのエントリを次のように置き換えます。
PHPickerViewController、結果を選択してアプリに入力し、自分のビジネス データに保存します。 -
写真エディターの制限モードを空の状態にする: ユーザーが数枚の写真のみを承認すると、エディターは一般的なエラーを表示する代わりに、編集可能な写真をさらに追加するようにユーザーに求めます。実行する価値がある理由: PhotoKit API は、それらが写真ライブラリ内の唯一のリソースであるかのように結果を返します。アプリは UI 内のリソース スコープを解釈する必要があります。開始方法: リソース リストに入る前に検索します。
.limited、リストが空の場合、またはリストの数が少ない場合に、管理選択ボタンを提供します。 -
フォトアルバムの依存関係機能を調整: 「アプリ専用フォトアルバムの作成」をアプリ内のお気に入り、プロジェクトリスト、またはエクスポートレコードに変更します。実行する価値がある理由: 講義ノート 制限付きモードでは、ユーザーのフォト アルバムをキャプチャしたり、作成したりすることはできません。開始方法: アルバム構造をアプリ独自のデータ レイヤーに保存します。 PhotoKit は、ユーザーが承認したアセットを読み取り、新しく作成されたリソースを保存することのみを担当します。
-
選択の変更をリッスンしてキャッシュを更新: ユーザーが設定または管理インターフェイスで選択を変更した後、写真リスト、サムネイル キャッシュ、および編集キューを同時に更新する必要があります。実行する価値がある理由: セッションの説明 ユーザーが選択内容を変更すると、アプリは通知を受け取ります。開始方法: 始めましょう
PHPhotoLibraryChangeObserver、変更コールバックで現在表示されているリソース コレクションを再計算します。
関連セッション
- 新しい写真ピッカーの紹介 — 直接説明
PHPickerViewControllerは、このセッションで推奨される許可不要の写真選択ソリューションです。 - プライバシーの向上による信頼の構築 - iOS 14 におけるプライバシーの透明性とユーザー制御の観点から、これらの権限変更の背景を説明します。
- アプリでローカル ネットワークのプライバシーをサポートする — iOS 14 の許可プロンプトに関しても、ユーザーによってトリガーされ、明確な理由がある許可プロセスを設計するのに適しています。
- 位置情報の新機能 — iOS 14 での位置情報の許可の精度と許可の変更を表示します。これは、プライバシー許可の UI 適応のアイデアを理解するのに役立ちます。
コメント
GitHub Issues · utterances