Chế độ Trẻ em trong Capacitor SDK

Nếu ứng dụng Capacitor của bạn dành cho trẻ em, bạn phải tuân thủ chính sách của AppleGoogle. Nếu bạn đang sử dụng Adapty SDK, chỉ cần vài bước đơn giản là có thể cấu hình SDK để đáp ứng các chính sách này và vượt qua quá trình xét duyệt trên cửa hàng ứng dụng.

Cần chuẩn bị gì?

Bạn cần cấu hình SDK để tắt việc thu thập:

Ngoài ra, chúng tôi khuyến nghị sử dụng customer user ID một cách thận trọng. User ID theo định dạng <FirstName.LastName> chắc chắn sẽ bị coi là thu thập dữ liệu cá nhân, tương tự như việc sử dụng email. Đối với Kids Mode, phương pháp tốt nhất là dùng các định danh ngẫu nhiên hoặc ẩn danh (ví dụ: ID đã được băm hoặc UUID do thiết bị tạo ra) để đảm bảo tuân thủ quy định.

Bật Chế độ Trẻ em

Cập nhật trong Adapty Dashboard

Trong Adapty Dashboard, bạn cần tắt tính năng thu thập địa chỉ IP. Để làm điều này, hãy vào App settings và nhấn Disable IP address collection trong phần Collect users’ IP address.

Cập nhật trong mã ứng dụng di động của bạn

Để tuân thủ các chính sách, hãy tắt tính năng thu thập IDFA, GAID và địa chỉ IP của người dùng:


try {
  await adapty.activate({
    apiKey: 'YOUR_PUBLIC_SDK_KEY',
    params: {
      // Disable IP address collection
      ipAddressCollectionDisabled: true,

      // Disable IDFA collection on iOS
      ios: {
        idfaCollectionDisabled: true
      },

      // Disable Google Advertising ID collection on Android
      android: {
        adIdCollectionDisabled: true
      }
    }
  });
  console.log('Adapty activated with Kids Mode enabled');
} catch (error) {
  console.error('Failed to activate Adapty with Kids Mode:', error);
}

Cấu hình theo nền tảng

iOS

Ngay cả khi bạn đã tắt thu thập IDFA trong code (như trên), bản build vẫn bao gồm các framework AdSupportAppTrackingTransparency. Danh mục Kids Category trên App Store không cho phép điều này. Và vì SDK v4 cài đặt iOS SDK native thông qua Swift Package Manager, không có bước Podfile nào để loại bỏ chúng.

Để tuân thủ yêu cầu của Apple, hãy thêm lệnh adapty-kids-mode đi kèm với SDK vào postinstall của ứng dụng. Lệnh này bật trait KidsMode của SDK, giúp biên dịch loại bỏ đoạn code đó. Lệnh sẽ được áp dụng lại mỗi khi cài đặt:

{
  "scripts": {
    "postinstall": "adapty-kids-mode"
  }
}

Sau đó cài đặt lại và re-resolve các gói iOS, rồi build với Xcode 26 trở lên:

npm install
npx cap sync ios

Để tắt Kids Mode, chạy adapty-kids-mode disable và sync lại.

Nếu bạn đang dùng CocoaPods cho iOS, bạn cũng có thể bật Kids Mode ở cấp độ native:

  1. Cập nhật Podfile của bạn:
  • Nếu bạn chưa có phần post_install, hãy thêm toàn bộ đoạn code bên dưới.

    • Nếu bạn đã có phần post_install, hãy gộp các dòng được đánh dấu vào đó.
    def adapty_enable_kids_mode(installer)
      installer.pods_project.targets.each do |target|
        next unless target.name == 'Adapty'
        target.build_configurations.each do |config|
          flags = config.build_settings['OTHER_SWIFT_FLAGS'] || '$(inherited)'
          flags = flags.join(' ') if flags.is_a?(Array)
          config.build_settings['OTHER_SWIFT_FLAGS'] = "#{flags} -DADAPTY_KIDS_MODE"
        end
        target.frameworks_build_phase.files.dup.each do |bf|
          target.frameworks_build_phase.remove_build_file(bf) if bf.display_name.to_s.include?('AdSupport')
        end
      end
      installer.pods_project.save
      Dir.glob(File.join(installer.sandbox.root, 'Target Support Files', '**', '*.xcconfig')).each do |xc|
        File.write(xc, File.read(xc).gsub(/\s*-framework\s+"?AdSupport"?/, ''))
      end
    end
    
    post_install do |installer|
      # ... keep your existing post_install body (Flutter adds one automatically) ...
    
      adapty_enable_kids_mode(installer)   # <-- enable Adapty Kids Mode
    end
  1. Chạy lệnh sau để áp dụng các thay đổi:

    pod install

Android: xóa quyền advertising ID

Đặt adIdCollectionDisabled: true (ở trên) sẽ ngăn Adapty thu thập advertising ID, nhưng SDK vẫn khai báo quyền AD_ID. Nếu ứng dụng của bạn chỉ nhắm đến trẻ em được biên dịch với Android 13 (API 33) trở lên, Google Play sẽ cấm bạn yêu cầu quyền này.

Thêm hai khai báo sau vào phần tử <manifest> của bạn:

  1. Khai báo namespace tools (manifest mặc định của Capacitor không có namespace này).
  2. Thêm một entry <uses-permission> cho AD_ID với tools:node="remove" để loại bỏ nó.
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission
        android:name="com.google.android.gms.permission.AD_ID"
        tools:node="remove" />

    <!-- your existing manifest content -->
</manifest>

Các bước tiếp theo

Sau khi bật Chế độ Trẻ em, hãy đảm bảo:

  1. Kiểm thử ứng dụng kỹ lưỡng để đảm bảo tất cả các tính năng hoạt động đúng
  2. Xem lại chính sách quyền riêng tư của ứng dụng để phản ánh việc đã tắt thu thập dữ liệu
  3. Nộp ứng dụng để xét duyệt kèm theo tài liệu rõ ràng về việc tuân thủ Chế độ Trẻ em

Để biết thêm thông tin về yêu cầu theo từng nền tảng: