Google Playのデータ セーフティは、AndroidManifestの権限を転記するだけでは完成しません。
アプリ本体とSDKが実際にどのデータを端末外へ送り、その後どこで何に使うかを確認して回答します。
先にデータフローを1行ずつ書き出す
Play Consoleを開く前に、データが「どこから、どこへ、何のために」動くかを一覧にします。Android Developersの確認項目では、権限やAPIに加えて、入力フォーム、WebView、ライブラリ、SDKもデータ利用の手掛かりとして挙げています。
次の順に見ると、アプリ本体だけを確認してSDK分を落とす事故を減らせます。
- ログイン、プロフィール、投稿、問い合わせ、購入などの機能
- AndroidManifestの権限と、位置情報や端末識別子などへアクセスするAPI
- 分析、広告、クラッシュレポート、認証、通知に使うSDK
- アプリが表示内容を管理するWebViewと、その中にあるフォーム
- 自社サーバーから外部サービスへ送るデータ
SDKは名前だけで判断せず、利用中のバージョンと設定を確認します。Google Play SDK Indexでは、SDKが要求する権限や、提供者が公開しているData safety guidanceへのリンクを調べられます。ただし、同じSDKでも有効にした機能で送信内容は変わるため、最終回答は自分の実装に合わせます。
「収集」は端末外への送信から判定する
Google Playの公式定義では、Collectはユーザーデータをアプリから端末外へ送ることです。自社サーバーだけでなく、SDKが第三者のサーバーへ直接送る場合や、アプリがコードや動作を管理するWebViewから送る場合も含まれます。
判断が分かれやすい処理は次のとおりです。
| 処理 | フォームでの扱い |
|---|---|
| 端末内だけで処理し、外へ送らない | 収集として開示しなくてよい |
| 端末外へ送り、メモリ上でリクエスト処理に必要な時間だけ使う | 一時処理としてフォームには回答する |
| 仮名化したIDを送り、合理的にユーザーへ再関連付けできる | 開示する |
| 開発者や中間者が読めないエンドツーエンド暗号化で送る | 条件を満たせば収集として開示しなくてよい |
「保存しないから回答不要」とは限りません。一時処理もフォームには含めますが、Googleの条件を満たす場合はストア上のデータ セーフティ欄に表示されません。広告プロフィールやほかのユーザープロフィールの作成は、一時処理として扱えません。
「共有」は第三者へ移すかで分ける
Sharingは、アプリから収集したユーザーデータを第三者へ移すことです。自社サーバーから第三者サーバーへ送る処理、SDKによる直接送信、別アプリへの端末内転送も確認します。
一方、開発者の指示に基づいて代理処理するサービスプロバイダへの転送は、共有として開示しなくてよい場合があります。ここで対象外になるのは「共有」の判定です。端末外へ送っている事実がなくなるわけではないため、収集するデータとしての回答は別に確認します。
契約上の呼び名だけでサービスプロバイダと決めず、相手が自社の目的でデータを利用するか、ほかのデータと組み合わせるかまで利用規約と設定で確かめます。
データタイプと利用目的を対応させる
棚卸し表の各行を、Google Playのデータタイプと利用目的へ移します。権限があるかではなく、実際に端末外へ送る内容で選びます。
| 実装で扱う内容 | 確認するデータタイプ | 目的の候補 |
|---|---|---|
| ログイン用メールアドレス | Personal infoのEmail address | Account management、App functionality |
| 問い合わせの自由記述 | App activityのOther user-generated content | App functionality |
| クラッシュのstack trace | App info and performanceのCrash logs | Analytics |
| Firebase installation IDなど | Device or other IDs | 実際の用途に応じて選ぶ |
表の右列は回答例の固定値ではありません。同じメールアドレスでも、ログイン、開発者からの連絡、マーケティングでは目的が変わります。該当する目的をすべて選びます。
「任意」は全ユーザーが選べる場合だけにする
各データタイプには、収集が必須か任意かも回答します。任意とできるのは、地域や端末にかかわらず、すべてのユーザーが提供を選べるか、opt-inまたはopt-outできる場合です。
Google Playの回答はpackageごとに一つで、現在配信しているバージョンと地域を横断した取り扱いの合計です。あるバージョンや地域で必須なら、別の環境では選べても任意とは回答できません。
内部テストだけで配信するアプリはフォーム提出の対象外です。closed、open、productionの各trackで公開するアプリは対象になり、データを収集しない場合もフォームとプライバシーポリシーへのリンクが必要です。
Play Consoleへ入力する
棚卸しが終わったら、Play ConsoleのApp contentからData safetyを開きます。公式手順に沿って次の順で入力します。
- 収集または共有するユーザーデータがあるか答える
- 通信時の暗号化と、データ削除リクエスト手段の有無を答える
- 収集または共有するデータタイプをすべて選ぶ
- データタイプごとに、収集・共有、一時処理、必須・任意、利用目的を答える
- Store listing previewでユーザーからの見え方を確認する
- 実装、SDKの設定、プライバシーポリシーと照合してSubmitする
判断が残る項目はSave as draftで保存できます。CSVで回答をexportし、SDK更新時の差分確認に使う方法もあります。提出後も、収集方法や利用目的が変わった時点で回答を更新します。
問い合わせフォームも組み込み方まで確認する
アプリから問い合わせフォームを利用する場合は、画面に見える本文だけでなく、送信時に付く値まで棚卸しします。IndieFormの公開フォームでは、設定に応じてメールアドレス、名前、問い合わせ本文、画像添付を受け取り、URLパラメータからアプリバージョン、OS、端末、hash化したユーザーIDなどの環境情報を保存できます。
これらをデータ セーフティへどう反映するかは、アプリ内WebViewで扱うのか、外部ブラウザへ移動するのか、どの項目を有効にしているのかで変わります。IndieFormが申告内容を決めるのではなく、開発者が実装とGoogle Playの定義を照合します。
問い合わせ窓口を設ける前に、少なくとも次を決めておくと回答と運用がずれにくくなります。
- 返信にメールアドレスが必要か
- 画像添付を許可するか
- 調査に必要な環境情報だけを渡しているか
- 問い合わせ本文と添付をいつまで保持するか
- 利用者がデータ削除を依頼できる窓口があるか
プライバシーポリシーURLとGoogle Play上の問い合わせ先が未準備なら、Google Playの必須項目を先に確認してください。iOS版も配信する場合は、同じ棚卸し表を再利用しつつ、App Storeの「Appのプライバシー」入力手順にあるApple固有の定義で回答し直します。