跳至主要內容
AppFoyer
免費開始

指南 商店表單和 SDK

如何填寫 Google Play 的 Data safety 表單和 Apple 的 App Privacy 詳細資料

每份問卷問什麼、你的 SDK 如何改變答案、大家最常答錯的三個問題,以及各供應商在哪裡公布你需要的答案。

列出建置中的每個 SDK,打開各供應商自己的揭露頁面或隱私權資訊清單,再加上你自己收集的資料,例如帳戶。然後根據這一份清單回答兩份問卷。Play 問的是收集了什麼、分享了什麼以及原因。Apple 問的也一樣,另外還問每種資料類型是否與使用者連結、是否用於追蹤。

改用幾分鐘完成這件事

AppFoyer 託管這篇指南所談的頁面:隱私權政策、服務條款、支援、帳戶刪除和 app-ads.txt,放在各自的子網域上,你不需要自己的網域或伺服器。一個應用程式免費,而且商店要求的任何內容都不會放在付費牆後面。

查核日期:2026年9月25日。 商店政策會變動,有時不會事先通知。以下所有內容都附上官方文件的連結,具有權威的是那個頁面,而不是本頁。如果兩者不一致,以商店為準。 本指南譯自英文;引用的商店文件保留英文原文。

把你的應用程式會傳出裝置的所有東西(包括 SDK)整理成一份清單,再根據它回答兩份問卷。Google Play 的 Data safety 表單和 Apple 的 App Privacy 詳細資料,用不同的措辭問同樣的事實。如果你的答案來自兩份各自的記憶,它們就會漸漸對不上。

Google Play 上的每個應用程式都必須填寫 Data safety 表單,包括什麼都不收集的應用程式。只有僅在內部測試測試群組上線的應用程式可以豁免(Google Play 的 Data safety 說明)。Apple 則要求 App Store 上的每個應用程式都提供 App Privacy 詳細資料(Apple 的 App Privacy 詳細資料)。

表單在哪裡

  • Google Play:Play Console → 你的應用程式 → App content → Data safety。
  • App Store:App Store Connect → 你的應用程式 → App Privacy。

步驟 1:建立清單

  1. 每一個第三方 SDK。讀你的相依套件檔案:build.gradle / libs.versions.toml、Podfile / Package.swift、pubspec.yaml、package.json。兩家商店都把 SDK 收集的資料算成你收集的。Apple 要你為應用程式中的所有程式碼負責,包括不是你寫的程式碼。
  2. 每個 SDK 會傳送什麼。以供應商自己的頁面為準。有些供應商會用 Play 自己的用語公布答案,包括 RevenueCat、Unity Ads 和 OneSignal。Google 為 AdMob 和每一項 Firebase 產品都公布了對照表。在 iOS 上,大多數現行的 SDK 都附有隱私權資訊清單(PrivacyInfo.xcprivacy)。在 Xcode 中打開 Organizer,在封存檔上按右鍵並選擇Generate Privacy Report,就能在同一頁看到建置中的所有資訊清單(Apple 的隱私權資訊清單文件)。
  3. 你自己收集的資料。帳戶(電子郵件、使用者 ID)、你的後端儲存的任何東西、你自己的程式碼讀取的位置、你的伺服器保存的購買紀錄。

有些供應商什麼都沒公布。AppLovin 沒有針對任何一家商店的資料類型清單,好幾個分析 SDK 也沒有 Play 的對照。遇到這種情況,請閱讀該 SDK 自己關於傳輸內容的文件,並把缺漏記下來。不要用猜的。

步驟 2:Google Play 的問題

對於每種資料類型,Play 會問:

  • 收集、分享,還是兩者皆是?「收集」指傳出裝置。「分享」指傳給第三方。代表你處理資料的服務供應商不算分享,完全匿名化的資料也不算。這就是為什麼 Firebase Analytics 通常是「收集、不分享」,而廣告 SDK 通常是「收集且分享」。
  • 是否只做暫時性處理?只有在資料只保留在記憶體中、時間僅足以處理那一次請求時才算,例如為了取得天氣而傳送、但不會儲存的位置。
  • 必要還是選擇性?選擇性指使用者可以選擇是否收集。
  • 原因是什麼?Play 的用途有:App functionality、Analytics、Developer communications、Advertising or marketing、Fraud prevention, security, and compliance、Personalization、Account management。收集和分享各自有自己的用途。

接著是兩個安全性問題。所有使用者資料在傳輸時都經過加密嗎?只有你能確認這一點。只要有一個純 http:// 端點,答案就是否。使用者可以要求刪除嗎?如果你提供了要求刪除的方式,或者你會在 90 天內自動刪除資料,就可以回答是。

如果你的應用程式讓使用者建立帳戶,同一份表單中的 Data deletion 問題還會要求一個網頁連結,讓使用者可以在那裡要求刪除帳戶(Google Play 的帳戶刪除規定)。請參閱帳戶刪除網址指南。

在 Google Play 自己的帳單頁面中輸入的付款資訊,只要你的應用程式從不存取,就不需要申報。你的應用程式或 SDK 收到的購買紀錄,仍然需要由你申報。

步驟 3:Apple 的問題

對於每種資料類型,Apple 會問用途,以及兩個是非題:

  • 是否與使用者連結?除非資料在收集前就已去識別化,否則都算有連結。一個帳戶、一個使用者 ID 或一個裝置 ID 就足以連結。
  • 是否用於追蹤?追蹤指把你的應用程式中關於某位使用者或裝置的資料,和其他公司的資料結合,用於指定目標廣告或廣告成效評估,或是分享給資料仲介。即使你從未使用那項功能,SDK 也可能這麼做。只要有任何資料用於追蹤,應用程式就必須先透過 App Tracking Transparency 請求許可(Apple 的使用者隱私權與資料使用)。

Apple 的用途有:Third-Party Advertising、Developer’s Advertising or Marketing、Analytics、Product Personalization、App Functionality、Other Purposes。

只有在四個條件全部成立時,Apple 才允許你不列出某種資料類型。它不得用於追蹤或廣告。它只能偶爾收集、不屬於應用程式的主要功能,而且由使用者自行選擇。另外,使用者每次都必須在知情的情況下提供。大多數 SDK 資料在第一個條件就不符合。

大家最常答錯的三個答案

  1. 「我們什麼都不收集」。當機回報工具和分析工具會傳送裝置識別碼和診斷資料,即使你自己的程式碼什麼都沒傳。
  2. 廣告 SDK 填「不分享」。廣告聯播網會為了它們自己的廣告用途接收識別碼和互動資料。那就是分享。
  3. 表單和隱私權政策不一致。商店會把兩者一起看,所以光是不一致就足以構成問題。兩者都要根據同一份清單撰寫。請參閱兩者不一致時。

保持最新

答案的新舊程度,取決於你的 SDK 清單有多新。新增 SDK 時,請在同一次變更中同時更新兩份表單和你的隱私權政策。供應商也會隨著新版 SDK 修訂他們的揭露內容。

讓 AI 助理找出 SDK

最花時間的是步驟 1,而在你的應用程式儲存庫中開啟的程式設計代理可以替你完成:Claude Code、Cursor、Codex 等等。下面的提示詞要求它只讀你的建置檔案,並列出每個 SDK 和每項資料事實,以及它們出自哪個檔案。它不會問每個 SDK 收集什麼。模型對供應商揭露內容的記憶只是猜測,那部分應該以供應商為準。

它會用一種 AppFoyer 儀表板能讀取的小型 JSON 格式回覆。沒有 AppFoyer 的話,它在 Step 2 給你看的那份清單,依然就是你填寫兩份表單的依據。

You are helping me fill in Google Play's Data safety form and Apple's App Privacy details for my mobile app. AppFoyer turns your answer into draft answers for both forms, using each SDK vendor's own published disclosure. Your job is only to find what is in the build — not to say what any SDK collects.

## About the app

- App name: [app name]
- Platforms: [Android, iOS or both]

## Step 1 — read the build files

Read only the app's build, manifest and store-metadata files — for example `build.gradle(.kts)`, `gradle/libs.versions.toml`, `AndroidManifest.xml`, `Podfile.lock`, `Package.swift`, `Package.resolved`, `Info.plist`, `*.entitlements`, `PrivacyInfo.xcprivacy`, `pubspec.yaml`, `package.json`, `app.json`. Do not open `.env` files, keystores, credentials or any other secrets, and do not change any file. If you cannot read the code, ask me which SDKs the app uses instead.

Find:

1. Every third-party SDK in the build. Match it to one of these ids where it fits:

- `admob` — Google Mobile Ads (AdMob)
- `applovin-max` — AppLovin MAX
- `unity-ads` — Unity Ads
- `firebase-analytics` — Google Analytics for Firebase
- `mixpanel` — Mixpanel
- `amplitude` — Amplitude
- `meta-app-events` — Meta SDK — App Events
- `firebase-crashlytics` — Firebase Crashlytics
- `sentry` — Sentry
- `firebase-auth` — Firebase Authentication
- `google-sign-in` — Google Sign-In
- `meta-login` — Meta SDK — Facebook Login
- `revenuecat` — RevenueCat
- `firebase-messaging` — Firebase Cloud Messaging
- `onesignal` — OneSignal

   An SDK that fits none of them goes under `otherSdks` with its package name. Never force a match.

2. Which of these facts are true, from the dependencies, permissions and usage-description keys:

- `account` — users sign in or create accounts
- `analytics` — usage analytics
- `ads` — advertising
- `crash` — crash reporting or diagnostics
- `location` — the app reads the device location
- `purchases` — in-app purchases or subscriptions

   If none is true, the facts are `["none"]`.

Keep the file, and the line where you can, for every SDK and every fact. A README sentence is not evidence.

## Step 2 — confirm with me

Show me the list, grouped as SDKs, other SDKs and facts, each with its file. Ask me to confirm or correct it, and to add anything the build files cannot show — for example an SDK loaded at runtime. Wait for my answer.

## Step 3 — reply in AppFoyer's format

Reply with one ```json code block and nothing after it, exactly in this shape:

```json
{
  "format": "appfoyer-store-forms/1",
  "platform": "android | ios | both",
  "sdks": [{ "id": "admob", "file": "app/build.gradle.kts", "line": 42 }],
  "otherSdks": [{ "name": "com.example:tracker", "file": "app/build.gradle.kts", "line": 57 }],
  "facts": [{ "fact": "ads", "file": "app/src/main/AndroidManifest.xml", "line": 12 }]
}
```

- `id` is one of the ids above, spelled exactly. `fact` is one of the facts above, or `none`.
- `line` is a number, or leave it out when you do not know it.
- Empty lists are `[]`. No comments inside the JSON.
- Do not describe what an SDK collects, and do not add fields.

搭配 AppFoyer

儀表板中的每個應用程式都有一個 Store forms 分頁。勾選你的建置中包含的 SDK,它就會根據這些 SDK 和你的應用程式設定,起草 Data safety 和 App Privacy 的答案。每個答案都會註明來源:供應商自己的答案、它的隱私權資訊清單,或是我們對它資料清單的解讀。這個分頁會標出你的隱私權政策沒有提到的 SDK,並提供可貼上的帳戶刪除連結。Claude Code 外掛程式會從你的建置檔案填入 SDK 清單。使用其他助理時,從分頁複製提示詞、執行它,再把回覆貼回來:在儲存任何東西之前,分頁會先顯示它所推得的答案。你仍然需要在各個主控台中輸入答案並在那裡檢查。這些是草稿,不是法律建議。這個分頁在每個方案中都免費。