BLOG
プライバシーマニフェスト対応
はじめに
Appleによる最新のプライバシー変更の一つをご紹介します。それは、開発者がアプリ内で収集しているデータについて、独自にまたはサードパーティのSDKを通じて説明し、使用するAPIの必要な理由を提供する必要があるというものです。
本記事では、Appleが設定したプライバシーマニフェストの主な期限やファイルの作成などについて説明します。
概要
プライバシーマニフェストは、アプリやサードパーティSDKがユーザーから収集するデータのカテゴリと、そのデータ収集の目的を記録するためのファイルです。アプリの配布準備が整うと、Xcodeはアプリ内のすべてのサードパーティSDKのプライバシーマニフェストを統合し、単一で使いやすいレポートとして提供します。
なぜ対応が必要なのか
プライバシーマニフェスト対応が必要な理由として、主に以下の3つが挙げられます。
- App Store審査の要件: 2024年春以降、iOSアプリをApp Storeに提出するためには、プライバシーマニフェストの提出が義務付けられています。対応していない場合、審査に通らず、アプリを公開できない可能性があります。
- ユーザーの信頼獲得: 近年、ユーザーは個人情報の取り扱いに対してより敏感になっています。プライバシーマニフェストを公開することで、アプリがユーザーの情報をどのように扱っているかを透明性を持って示すことができ、ユーザーの信頼を獲得できます。
- 法令遵守: GDPRやCCPAなどの個人情報保護法では、企業が収集する個人情報についてユーザーに開示する義務が定められています。プライバシーマニフェストは、これらの法令遵守に役立ちます。
対応期限
Appleが公表している主な期限は2つあります。
- 2024年3月13日: この日から、アップロードされるアプリケーションがデータ収集する理由の説明が必要な場合、Appleは事前にデータ収集する理由をアプリ内に記載するように開発者に連絡しています。
- 2024年5月1日: この日から、プライバシーマニフェストファイルに必要なAPIの使用する理由を記述していない新しいアプリは、App Store Connectに受け入れられません。さらに、一般的に使用されるサードパーティSDKのリストに新たに追加されたサードパーティSDKを使用する新規アプリや更新アプリも、プライバシーマニフェストにそれらの使用を記述する必要があります。
対応方法
以下では、プライバシーマニフェスト対応を行うために、必要な対応について説明します。
開発環境の準備
Flutterバージョンを3.19以降にアップデート
プライバシーマニフェストに対応するためには、最低でもFlutterバージョン3.19を使用する必要があります。
バージョンが3.19未満の場合は、fvm(Flutter Version Management)を使用してアップデートする必要があります。複数のバージョンのFlutterを管理するためにfvmを使用すると便利です。
fvmを使用してFlutterバージョンをアップデートする手順
1. fvmがインストールされていることを確認する。インストールされていない場合は、以下のコマンドを実行してインストールする。
dart pub global activate fvm
2. 次に、fvmを使用してFlutterのバージョン3.19をインストールする。
fvm install 3.19.0
3. プロジェクトで使用するFlutterバージョンを3.19に設定する。
fvm use 3.19.0
4. fvmを使用していることを確認するために、以下のコマンドを実行する。
fvm flutter --version
この手順を行うと、プロジェクトで使用するFlutterのバージョンを3.19以降に設定できます。
使用するパッケージの対応確認
プロジェクトで使用しているすべてのパッケージが、プライバシーマニフェストに対応していることを確認する必要があります。
- pubspec.yaml ファイルを確認し、依存関係として利用しているパッケージを確認する
- 各パッケージの公式ドキュメントを確認し、プライバシーマニフェストに対応しているかどうかを確認する
- 対応していないパッケージがある場合は、代替パッケージへの移行を検討する必要がある
調査
1. アプリ調査
アプリで使用しているすべてのAPIとSDKをリストアップし、それぞれがどのようなデータにアクセスし、どのように利用しているかを調査します。この調査結果は、プライバシーポリシーに詳細に記載する必要があります。
- APIとSDKのリストアップ:
- 使用している全てのサードパーティAPIとSDKを洗い出します
- Flutterプロジェクトのpubspec.yamlファイルや、ネイティブコード(iOSならPodfile、Androidならbuild.gradle)を確認します
- データアクセスと利用の調査:
- 各APIとSDKがどのデータにアクセスするかを確認します
- 公式ドキュメントやプライバシーポリシーを参照し、データ利用の詳細を把握します
2. ユーザーデータの洗い出し
アプリが収集する全てのユーザーデータを特定し、それぞれのデータ項目について以下の点を明確にします。
- データ項目の特定:
- ユーザー登録情報(名前、メールアドレスなど)
- 位置情報
- デバイス情報(OSバージョン、デバイスIDなど)
- 使用履歴や行動ログ
- データの詳細:
- 収集目的: サービス提供のため、ユーザーサポートのため、マーケティングのため
- 利用目的: 機能改善のため、ユーザー体験向上のため
- 保存期間: アカウント削除まで、特定の期間(例:6ヶ月)
3. ユーザー同意の確認
データ収集がユーザーの同意に基づいて行われることを確認し、その仕組みを検証します。
- 同意の取得:
- 初回起動時にプライバシーポリシーと利用規約への同意を求めるダイアログを表示します
- 各データ項目に対する明示的な同意を求める(例:位置情報の利用に関する同意)
- 同意の管理:
- 同意状況をアプリ内で管理し、ユーザーが設定からいつでも変更できるようにします
4. データの匿名化・統計化
収集したデータを匿名化・統計化する場合、その方法と目的を明確にします。
- 匿名化の実装:
- 個人を特定できない形でデータを保存・処理します。
- 匿名化アルゴリズムや手法を記載します。
- 統計データの利用:
- 匿名化データを利用する目的を明確にし、プライバシーポリシーに記載します。
5. 広告配信の調査
アプリ内で広告配信を行っている場合、その仕組みを調査し、ユーザーデータの収集・利用について明確にします。
- 広告ネットワークの確認:
- 使用している広告ネットワーク(例:Google AdMob、Facebook Audience Network)をリストアップします。
- データ収集と利用:
- 広告配信のために収集されるデータ(例:デバイスID、位置情報)を確認します。
- 広告ネットワークのプライバシーポリシーを参照し、データ利用の詳細を把握します。
6. ユーザー行動追跡の確認
ユーザー行動追跡(トラッキング)を行っている場合、その目的と方法を明確にし、ユーザーにオプトアウトの手段を提供します。
- トラッキングの確認:
- 使用しているトラッキングツール(例:Google Analytics、Firebase Analytics)をリストアップします。
- トラッキングの目的と方法:
- トラッキングデータの収集目的を明確にし、プライバシーポリシーに記載します。
- オプトアウト手段を提供し、ユーザーが簡単に設定を変更できるようにします。
PrivacyInfo.xcprivacy対応
PrivacyInfo.xcprivacyファイルは、アプリがアクセスするAPI、収集するデータ、トラッキングを行うドメインなどを記述するファイルです。App Storeの審査時に審査員がこのファイルを確認することで、アプリのプライバシーポリシーと整合性があるかどうかを判断します。
1. NSPrivacyAccessedAPITypes
このセクションでは、アプリがアクセスするAPIとその理由を記述します。各APIに対して以下の形式で記述します。
{
"NSPrivacyAccessedAPITypes": [
{
"type": "Location",
"reason": "ユーザーの現在地を特定し、近くの店舗を表示するため"
},
{
"type": "Camera",
"reason": "プロフィール画像を撮影およびアップロードするため"
}
]
}
2. NSPrivacyCollectedDataTypes
このセクションでは、アプリが収集するデータの種類を記述します。収集するデータに応じて以下の形式で記述します。
{
"NSPrivacyCollectedDataTypes": [
{
"type": "Email Address",
"purpose": "ユーザー登録および通知のため"
},
{
"type": "Phone Number",
"purpose": "アカウント認証およびサポート連絡のため"
}
]
}
3. NSPrivacyTrackingDomains
このセクションでは、アプリがトラッキングを行うドメインを記述します(該当する場合のみ)。以下の形式で記述します。
{
"NSPrivacyTrackingDomains": [
"example-tracking.com",
"another-tracking.com"
]
}
4. NSPrivacyTracking
このセクションでは、アプリがトラッキングを行うかどうかを記述します。トラッキングを行う場合はtrue
、行わない場合はfalse
を指定します。
{
"NSPrivacyTracking": true
}
PrivacyInfo.xcprivacyファイルの統合
以上のセクションをまとめて、PrivacyInfo.xcprivacyファイルの内容を以下のように統合します。
{
"NSPrivacyAccessedAPITypes": [
{
"type": "Location",
"reason": "ユーザーの現在地を特定し、近くの店舗を表示するため"
},
{
"type": "Camera",
"reason": "プロフィール画像を撮影およびアップロードするため"
}
],
"NSPrivacyCollectedDataTypes": [
{
"type": "Email Address",
"purpose": "ユーザー登録および通知のため"
},
{
"type": "Phone Number",
"purpose": "アカウント認証およびサポート連絡のため"
}
],
"NSPrivacyTrackingDomains": [
"example-tracking.com",
"another-tracking.com"
],
"NSPrivacyTracking": true
}
Apple Store Connect設定
Apple Store Connectにアクセスし、PrivacyInfo.xcprivacyファイルに記載した内容をApple Store Connectに正確に入力する必要があります。
審査提出
全ての情報が正しく入力されたら、調査が開始されます。
プライバシーマニフェストを提出しただけで、自動的に審査を通過できるわけではありません。審査官は、アプリが実際に記載内容通りに動作しているかどうか、ユーザーデータの取り扱いが適切かどうかなどを審査します。
審査通過率を高めるためには、以下の点に注意する必要があります。
- プライバシーマニフェストの内容が正確かつ最新であること
- ユーザーデータの収集と使用が正当な理由に基づいていること
- ユーザーがデータに関する権利を容易に行使できること
- アプリ内ですべてのデータ収集について明確に説明していること
まとめ
プライバシーマニフェスト対応は、開発者にとって負担が大きい業務ではありますが、ユーザーの信頼を獲得し、持続可能なアプリビジネスを築くために不可欠なものです。
皆様のアプリ開発が、より円滑かつ安全なものとなるよう、本記事が少しでもお役に立てれば幸いです。