Hướng dẫn khai App Privacy + Age Rating

App: House AI: Room Design · Bundle com.exo.houseai · ASC App ID 6780491111 · v1.2 · Cập nhật 2026-06-25

Tóm tắt 30 giây House AI có ads + tracking thật (AdMob + ATT + Firebase/Facebook/TikTok/Adjust) và xử lý ảnh phòng do user cung cấp. Vì vậy phần App Privacy KHÔNG được để "No data collected". Phải khai 4 nhóm: Identifiers (IDFA), Usage Data, User Content (Photos), và bật Used for Tracking = Yes cho IDFA + Usage Data. Age Rating để 4+ (mọi câu hỏi = None). Đây là tài liệu hướng dẫn làm tay khi không submit tự động được qua Claude/Playwright.
Mục lục
  1. Khi nào dùng tài liệu này
  2. Mở trang App Privacy trên ASC
  3. Bước A — "Do you collect data?" → Yes
  4. Bảng data types cần khai cho House AI
  5. Khai từng nhóm data (chi tiết click)
  6. Used for Tracking = Yes (ATT)
  7. Publish App Privacy
  8. Age Rating (4+)
  9. Bằng chứng từ source code
  10. Gotchas & lưu ý

1. Khi nào dùng tài liệu này

Flow chuẩn là Claude tự mở ASC web qua Playwright MCP và tick checkbox giúp. Nhưng bước đó cần đăng nhập ASC + 2FA bằng người thật trong cửa sổ Chromium. Nếu không login được (2FA không nhận, cửa sổ đóng, PO bận…), PO có thể tự khai tay theo các bước dưới đây — kết quả y hệt.

⚠ Bắt buộc trước khi submit: App Privacy + Age Rating phải hoàn tất thì nút Submit for Review mới cho bấm. Đây là 2 mục API không khai được — chỉ làm qua web.

2. Mở trang App Privacy trên ASC

2.1 Đăng nhập appstoreconnect.apple.com (Apple ID + 2FA).
2.2 Vào thẳng URL: https://appstoreconnect.apple.com/apps/6780491111/distribution/privacy
(hoặc: My Apps → House AI → tab App Privacy ở sidebar trái, dưới mục General.)
2.3 Lần đầu trang hỏi "Get Started" → bấm để bắt đầu questionnaire.

3. Bước A — "Do you or your third-party partners collect data from this app?"

Chọn Yes, we collect data from this app.

Đừng chọn "No". House AI dùng AdMob, Firebase Analytics, Facebook/TikTok/Adjust SDK và upload ảnh phòng lên server → chắc chắn có thu thập dữ liệu. Khai "No data collected" mà app có SDK ads = Apple reject (Guideline 5.1.1) hoặc gỡ app sau khi phát hiện.

4. Bảng data types cần khai cho House AI

Apple chia thành các data type. Với mỗi loại được tick, ASC hỏi tiếp 3 câu: Linked to identity? / Used for tracking? / Purposes?. Dưới đây là cấu hình đúng cho House AI:

Nhóm → Data typeTick?Linked to userUsed for trackingPurpose(s)
Identifiers → Device ID (IDFA/IDFV)✓ YesYesYesThird-Party Advertising; Analytics
Usage Data → Product Interaction✓ YesYesYesAnalytics; Third-Party Advertising
Usage Data → Advertising Data✓ YesYesYesThird-Party Advertising
User Content → Photos or Videos✓ YesNoNoApp Functionality
Diagnostics → Crash / Performance✗ Bỏ——— (không có Crashlytics)
Location✗ Bỏ——— (không có CLLocationManager)
Contact Info / Name / Email✗ Bỏ——— (app không có form đăng nhập)
Nguyên tắc: chỉ tick những gì app THỰC SỰ thu thập (xem bằng chứng code §9). Khai dư cũng gây hiểu nhầm; khai thiếu IDFA/tracking khi có ATT = reject.

5. Khai từng nhóm data (chi tiết click)

5.1 Identifiers → Device ID

  1. Ở màn chọn data types, mục Identifiers, tick Device ID.
  2. Bấm Save → ASC hỏi tiếp cho Device ID:
  3. Is this data linked to the user's identity? → Yes (IDFA dùng để target ads cá nhân hoá).
  4. Do you use this data for tracking? → Yes (app gọi ATTrackingManager.requestTrackingAuthorization).
  5. Purposes → tick Third-Party Advertising + Analytics.

5.2 Usage Data → Product Interaction + Advertising Data

  1. Mục Usage Data, tick Product Interaction và Advertising Data.
  2. Cả hai → Linked? Yes · Tracking? Yes.
  3. Purposes:
    • Product Interaction → Analytics + Third-Party Advertising (Firebase logEvent + Facebook/TikTok/Adjust events).
    • Advertising Data → Third-Party Advertising (impression/click/revenue ad).

5.3 User Content → Photos or Videos

  1. Mục User Content, tick Photos or Videos.
  2. Linked? → No (ảnh phòng không gắn danh tính user).
  3. Used for tracking? → No.
  4. Purposes → chỉ App Functionality (ảnh upload lên backend Modal để AI redesign phòng).
Lưu ý camera: app dùng cả thư viện ảnh (PHPicker) lẫn camera (chụp phòng). Cả hai đều rơi vào "Photos or Videos" với mục đích App Functionality — không cần khai thêm data type riêng cho camera.

6. Used for Tracking = Yes (vì có ATT)

House AI hiển thị App Tracking Transparency prompt (NSUserTrackingUsageDescription có trong Info.plist) và truyền IDFA cho mạng quảng cáo + MMP (Adjust). Theo định nghĩa của Apple, đây là tracking. Vì vậy:

ASC sẽ tự gom các data type có Tracking=Yes vào mục "Data Used to Track You" trên trang nutrition label — đây là kết quả đúng và mong muốn.

7. Publish App Privacy

7.1 Sau khi khai xong tất cả nhóm → bấm Save ở từng bước.
7.2 Quay lại trang tổng App Privacy → review lại nutrition label preview ("Data Used to Track You" + "Data Linked to You" + "Data Not Linked to You").
7.3 Bấm Publish (góc trên phải). Xác nhận. Privacy giờ "Ready for submission".
Xong phần Privacy. Có thể sửa lại trước khi app được approve; sau khi live thì cập nhật sẽ áp dụng cho version kế tiếp.

8. Age Rating (4+)

House AI là công cụ thiết kế phòng — không bạo lực / sex / cờ bạc / chất kích thích. Mặc định EXO: 4+.

8.1 URL: https://appstoreconnect.apple.com/apps/6780491111/distribution/ageRating (hoặc tab Age Rating trong App Information).
8.2 Bấm Edit. Mọi câu hỏi (Violence, Sexual Content, Profanity, Horror, Gambling, Contests, Unrestricted Web Access, Medical/Treatment…) → để None.
8.3 Câu "Made for Kids" → No (app có ads + tracking, không nằm trong chương trình Kids).
8.4 Bấm Done / Save → rating hiển thị 4+.

9. Bằng chứng từ source code (đối chiếu nếu cần)

Cấu hình ở §4 được suy ra từ việc quét repo house-ai-ios:

Khai gìBằng chứng trong code
IDFA + TrackingSources/Ads/ATTManager.swift (requestTrackingAuthorization), ConsentManager.swift (UMP), Info.plist NSUserTrackingUsageDescription
Usage Data → Analytics + AdsSources/Ads/Tracking/PaidImpressionLogger.swift — Firebase Analytics.logEvent, Facebook AppEvents.logPurchase, TikTok trackTTEvent, Adjust trackAdRevenue
Advertising DataAdMob Google-Mobile-Ads-SDK + mediation (Meta/Mintegral/AppLovin) trong Podfile
Photos / CameraSources/Components/ImagePickers.swift (PHPicker + UIImagePickerController), upload tới house-ai-web.modal.run trong DesignService.swift; Info.plist NSPhotoLibraryUsageDescription, NSCameraUsageDescription
KHÔNG CrashlyticsKhông tìm thấy import FirebaseCrashlytics
KHÔNG LocationKhông có CLLocationManager
KHÔNG ContactsKhông có CNContactStore / form email-name

10. Gotchas & lưu ý