Hướng dẫn Biểu mẫu cửa hàng và SDK
Cách điền biểu mẫu Data safety của Google Play và App Privacy details của Apple
Mỗi bảng câu hỏi hỏi gì, SDK của bạn thay đổi câu trả lời thế nào, ba câu hỏi người ta hay trả lời sai, và nơi mỗi nhà cung cấp công bố câu trả lời bạn cần.
Liệt kê mọi SDK trong bản build, mở trang công bố hoặc privacy manifest của chính từng nhà cung cấp, và thêm phần thu thập của riêng bạn, chẳng hạn tài khoản. Sau đó trả lời cả hai bảng câu hỏi từ chính danh sách đó. Play hỏi dữ liệu nào được thu thập, chia sẻ và vì sao. Apple hỏi như vậy, cộng thêm việc mỗi loại dữ liệu có liên kết với người dùng và có dùng để theo dõi hay không.
Làm việc này trong vài phút thay vì thế
AppFoyer lưu trữ các trang mà hướng dẫn này nói đến — chính sách quyền riêng tư, điều khoản, hỗ trợ, xóa tài khoản và app-ads.txt — trên subdomain riêng của ứng dụng, không cần tên miền hay máy chủ của riêng bạn. Một ứng dụng được miễn phí, và không có gì cửa hàng yêu cầu lại bị đặt sau tường phí.
Đã kiểm tra ngày 25 tháng 9, 2026. Chính sách của cửa hàng thay đổi, đôi khi không báo trước. Mọi thứ dưới đây đều dẫn liên kết đến tài liệu chính thức, và trang đó — không phải trang này — mới là căn cứ. Nếu hai bên mâu thuẫn, cửa hàng là đúng. Hướng dẫn này được dịch từ tiếng Anh; các trích dẫn từ tài liệu của cửa hàng được giữ nguyên bản tiếng Anh.
Lập một danh sách những gì ứng dụng gửi ra khỏi thiết bị, bao gồm cả SDK, và trả lời cả hai bảng câu hỏi từ danh sách đó. Biểu mẫu Data safety của Google Play và App Privacy details của Apple hỏi về cùng những sự thật bằng những cách diễn đạt khác nhau. Khi câu trả lời đến từ hai trí nhớ khác nhau, chúng sẽ lệch nhau.
Mọi ứng dụng trên Google Play đều phải hoàn thành biểu mẫu Data safety, kể cả ứng dụng không thu thập gì. Chỉ những ứng dụng đang chạy trên kênh internal testing mới được miễn (trợ giúp về Data safety của Google Play). Apple yêu cầu App Privacy details cho mọi ứng dụng trên App Store (App Privacy details của Apple).
Các biểu mẫu nằm ở đâu
- Google Play: Play Console → ứng dụng của bạn → App content → Data safety.
- App Store: App Store Connect → ứng dụng của bạn → App Privacy.
Bước 1: lập danh sách
- Mọi SDK bên thứ ba. Đọc các tệp khai báo phụ thuộc:
build.gradle/libs.versions.toml,Podfile/Package.swift,pubspec.yaml,package.json. Cả hai cửa hàng đều tính những gì một SDK thu thập là của bạn. Apple buộc bạn chịu trách nhiệm cho mọi mã trong ứng dụng, kể cả mã bạn không viết. - Mỗi SDK gửi gì. Dùng trang của chính nhà cung cấp. Một số nhà cung cấp công bố câu trả lời bằng
chính thuật ngữ của Play, trong đó có RevenueCat, Unity Ads và OneSignal. Google công bố bảng cho
AdMob và cho từng sản phẩm Firebase. Trên iOS, hầu hết SDK hiện nay đi kèm một privacy manifest
(
PrivacyInfo.xcprivacy). Trong Xcode, mở Organizer, nhấp chuột phải vào một bản archive và chọn Generate Privacy Report để xem mọi manifest trong bản build trên cùng một trang (tài liệu về privacy manifest của Apple). - Phần thu thập của riêng bạn. Tài khoản (email, user id), bất cứ thứ gì backend của bạn lưu, vị trí mà mã của bạn đọc, hồ sơ mua hàng mà máy chủ của bạn lưu giữ.
Một số nhà cung cấp không công bố gì. AppLovin không có danh sách loại dữ liệu cho cửa hàng nào, và một số SDK phân tích không có ánh xạ cho Play. Với những trường hợp đó, hãy đọc tài liệu của chính SDK về những gì nó truyền đi và ghi lại chỗ còn thiếu. Đừng đoán.
Bước 2: các câu hỏi của Google Play
Với mỗi loại dữ liệu, Play hỏi:
- Collected, shared, hay cả hai? “Collected” (thu thập) nghĩa là gửi ra khỏi thiết bị. “Shared” (chia sẻ) nghĩa là gửi cho bên thứ ba. Nhà cung cấp dịch vụ xử lý dữ liệu thay mặt bạn không tính là chia sẻ, dữ liệu đã ẩn danh hoàn toàn cũng không. Đó là lý do Firebase Analytics thường là “collected, not shared” còn SDK quảng cáo thường là “collected and shared”.
- Processed ephemerally (xử lý tạm thời)? Chỉ khi dữ liệu được giữ trong bộ nhớ vừa đủ lâu để phục vụ đúng một yêu cầu đó, chẳng hạn vị trí được gửi đi để lấy thời tiết và không được lưu lại.
- Required hay optional? Optional (tùy chọn) nghĩa là người dùng có thể chọn có cho thu thập hay không.
- Vì sao? Các mục đích của Play là: App functionality, Analytics, Developer communications, Advertising or marketing, Fraud prevention, security, and compliance, Personalization, Account management. Thu thập và chia sẻ mỗi thứ có mục đích riêng.
Sau đó là hai câu hỏi bảo mật. Mọi dữ liệu người dùng có được mã hóa khi truyền không? Chỉ bạn mới
kiểm tra được điều đó. Chỉ một endpoint http:// thuần là câu trả lời thành Không. Người dùng có thể
yêu cầu xóa không? Bạn có thể trả lời Có nếu bạn cung cấp cách để yêu cầu xóa, hoặc nếu bạn tự động
xóa dữ liệu trong vòng 90 ngày.
Nếu ứng dụng cho phép người dùng tạo tài khoản, các câu hỏi Data deletion trong cùng biểu mẫu còn yêu cầu một liên kết web nơi người dùng có thể yêu cầu xóa tài khoản (yêu cầu về xóa tài khoản của Google Play). Xem hướng dẫn về URL xóa tài khoản.
Thông tin thanh toán nhập trong bảng thanh toán riêng của Google Play không cần khai báo, miễn là ứng dụng của bạn không bao giờ truy cập chúng. Hồ sơ mua hàng mà ứng dụng hoặc một SDK nhận được thì vẫn là của bạn và phải khai báo.
Bước 3: các câu hỏi của Apple
Với mỗi loại dữ liệu, Apple hỏi mục đích và hai câu hỏi có/không:
- Linked to the user (liên kết với người dùng)? Dữ liệu được tính là có liên kết trừ khi nó được khử định danh trước khi thu thập. Một tài khoản, một user id hay một device id là đủ để liên kết.
- Used for tracking (dùng để theo dõi)? Theo dõi nghĩa là kết hợp dữ liệu ứng dụng của bạn về một người dùng hoặc thiết bị với dữ liệu của các công ty khác để nhắm mục tiêu quảng cáo hoặc đo lường quảng cáo, hoặc chia sẻ nó với một data broker. Một SDK có thể làm việc này dù bạn chưa bao giờ dùng tính năng đó. Nếu có bất cứ thứ gì dùng để theo dõi, ứng dụng phải xin phép qua App Tracking Transparency trước (user privacy and data use của Apple).
Các mục đích của Apple là: Third-Party Advertising, Developer’s Advertising or Marketing, Analytics, Product Personalization, App Functionality, Other Purposes.
Apple chỉ cho phép bạn bỏ một loại dữ liệu ra ngoài khi cả bốn điều kiện đều thỏa mãn. Nó không được dùng để theo dõi hay quảng cáo. Nó chỉ được thu thập không thường xuyên, ngoài chức năng chính của ứng dụng, và theo lựa chọn của người dùng. Và người dùng phải cung cấp nó một cách có ý thức mỗi lần. Hầu hết dữ liệu của SDK không đạt ngay điều kiện đầu tiên.
Ba câu trả lời người ta hay sai
- “Chúng tôi không thu thập gì.” Công cụ báo lỗi sự cố và phân tích gửi mã định danh thiết bị và dữ liệu chẩn đoán, kể cả khi mã của bạn không gửi gì.
- “Not shared” cho SDK quảng cáo. Các mạng quảng cáo nhận mã định danh và tương tác cho mục đích quảng cáo của riêng họ. Đó là chia sẻ.
- Biểu mẫu không khớp với chính sách quyền riêng tư. Các cửa hàng đọc hai thứ này cùng nhau, nên chỉ riêng sự không khớp đã là đủ. Hãy viết cả hai từ cùng một danh sách. Xem khi hai bản không khớp nhau.
Giữ cho luôn cập nhật
Câu trả lời chỉ cập nhật bằng danh sách SDK của bạn. Khi thêm một SDK, hãy cập nhật cả hai biểu mẫu và chính sách quyền riêng tư trong cùng một thay đổi. Các nhà cung cấp cũng sửa đổi phần công bố của họ theo phiên bản SDK mới.
Để trợ lý AI tìm các SDK
Phần chậm nhất là bước 1, và một coding agent mở trong repository của ứng dụng có thể làm thay bạn: Claude Code, Cursor, Codex và các công cụ tương tự. Prompt dưới đây yêu cầu nó chỉ đọc các tệp build và nêu tên mọi SDK và sự thật về dữ liệu cùng với tệp mà nó lấy ra. Prompt không hỏi mỗi SDK thu thập gì. Trí nhớ của một mô hình về phần công bố của nhà cung cấp chỉ là phỏng đoán, và phần đó nên đến từ chính nhà cung cấp.
Nó trả lời theo một định dạng JSON nhỏ mà dashboard AppFoyer đọc được. Không dùng AppFoyer thì danh sách nó cho bạn xem ở bước 2 vẫn là danh sách để điền cả hai biểu mẫu.
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.
Với AppFoyer
Mỗi ứng dụng trong dashboard có tab Store forms. Đánh dấu các SDK có trong bản build, và tab sẽ soạn câu trả lời Data safety và App Privacy từ các SDK đó và cài đặt của ứng dụng. Mỗi câu trả lời ghi rõ nguồn: câu trả lời của chính nhà cung cấp, privacy manifest của SDK, hoặc cách chúng tôi đọc danh sách dữ liệu của nhà cung cấp. Tab gắn cờ SDK nào mà chính sách quyền riêng tư của bạn không nhắc đến, và đưa cho bạn liên kết xóa tài khoản để dán vào. Plugin Claude Code điền danh sách SDK từ các tệp build của bạn. Với trợ lý khác, hãy sao chép prompt từ tab, chạy nó, rồi dán câu trả lời vào lại: tab hiển thị các câu trả lời mà nó suy ra trước khi lưu bất cứ thứ gì. Bạn vẫn phải tự nhập câu trả lời vào từng console và kiểm tra ở đó. Đây là bản nháp, không phải lời khuyên pháp lý. Tab này miễn phí trên mọi gói.