Community寫作與編輯github.com

erberkk/隱私與聲明

用於填寫或稽核 App Store 隱私與合規答案以及 Google Play 應用程式內容聲明 — 涵蓋 Apple App 隱私標籤、Play 資料安全(CSV 匯入)、健康應用程式聲明與 Health Connect 權限、廣告 ID、PrivacyInfo.xcprivacy 和必要理由 API、出口合規(ITSAppUsesNonExemptEncryption)、年齡分級、帳戶刪除(應用程式內、網址、重新驗證)、AI 功能的同意與揭露,以及健康資料規則。所有答案皆源自程式碼與 SDK 掃描,確保表單、隱私權政策與應用程式內文字一致。

隱私與聲明 是什麼?

此技能(erberkk/privacy-and-declarations)旨在幫助開發者或稽核人員,基於實際程式碼掃描結果,一致且準確地填寫 Apple App Store 與 Google Play 的隱私與合規表單。它支援 iOS 與 Android 平台,並處理 App Store 的 App 隱私詳細資訊、Google Play 的資料安全問卷、健康應用程式聲明、Health Connect 權限、廣告 ID 宣告、隱私清單(PrivacyInfo.xcprivacy)與必要理由 API、出口合規(ITSAppUsesNonExemptEncryption)、年齡分級、帳戶刪除(應用程式內與網站),以及 AI 功能與健康資料的特定規則。 在幕後,該技能執行 SDK 掃描腳本(script/scan-sdks.mjs),從鎖定檔案(如 pubspec.lock、Podfile.lock)識別已知 SDK 及其觸及的資料類別,並搜尋必要理由 API 使用、權限字串、廣告 ID 與追蹤 API。使用者需補全來自網路層與後端的庫存,建立統一的 `docs/privacy-inventory.md` 表格。每個表單答案都參考此庫存,確保隱私權政策、應用程式內文字與商店表單之間沒有矛盾。它還提供常見陷阱的檢查(例如,健康資料意外流入 AI 提示、依賴項目靜默添加 AD_ID 權限),並將最終決策點標記為需要人工核准。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erberkk/mobile-app-launch-skills/tree/HEAD/skills/privacy-and-declarations

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

隱私與聲明 是做什麼的?

目的

在兩個商店中提供真實且一致的隱私答案,並以程式碼中的證據為後盾。大多數隱私拒絕的原因是不一致:政策說一套,應用程式做另一套,表單又說第三套。

先決條件

  • 原始碼存取權限(應用程式和後端)以及鎖定檔案(pubspec.lock、Podfile.lock、Gradle 依賴項、package.json)。
  • 目前的隱私權政策和條款。
  • 了解每個接收使用者資料的後端端點和第三方服務。

1. 建立資料庫存(從程式碼,而非記憶)

在 repo 根目錄執行 scripts/scan-sdks.mjs。它會從鎖定檔案列出已知的 SDK 及其通常觸及的資料類別,並搜尋必要理由 API 使用、權限字串、廣告 ID 和追蹤 API。然後透過讀取網路層和後端來補全庫存:

資料來源(畫面 / SDK)是否傳送離裝置?傳送給誰?是否連結到使用者?用途保留期限是否選用?

規則:

  • 「僅在裝置上處理」表示從未傳送,包括傳送到您自己的伺服器。如果同步到您的後端,則視為已收集。
  • 您的處理者(代管服務、依照您的指示運作的 AI 提供者、支付 SDK)仍視為「已收集」;它們是否算作「已分享」因商店而異(見下文)。
  • 匿名當機報告和使用次數仍視為已收集(診斷 / 使用資料),通常「未連結」。

將庫存儲存為 docs/privacy-inventory.md。下面的每個答案都引用一個列。

2. Apple App 隱私(App Store Connect › App 隱私)

  • 將每個庫存列對應到 Apple 的類別(聯絡資訊、健康與健身、使用者內容、識別碼、購買項目、使用資料、診斷…)、用途、已連結與未連結,以及追蹤。
  • 追蹤 = 將您的資料與第三方資料連結以進行目標廣告或廣告衡量,或與資料經紀人分享。沒有廣告 SDK 且沒有資料經紀人通常表示「無追蹤」且無 ATT 提示。
  • 選擇性揭露僅在全部滿足 Apple 條件時適用(不頻繁、選用、每次由使用者發起、非追蹤/廣告)。很少適用於應用程式功能。
  • 文件:App 隱私詳細資訊。

3. Google Play 資料安全(政策 › 應用程式內容 › 資料安全)

  • 相同的庫存,Play 的分類(個人資訊、健康與健身、照片與影片、訊息、應用程式活動、應用程式資訊與效能、裝置或其他 ID、財務資訊…)。
  • 分享排除代表您處理資料的服務提供者傳輸;建立跨客戶廣告輪廓的 SDK 則屬於分享。
  • 短暫:僅在記憶體中處理,不儲存,僅用於即時請求(例如,分析後即丟棄的照片)。
  • 使用匯出為 CSV / 從 CSV 匯入:將 CSV 保存在 repo 中(store/data-safety.csv),以便像程式碼一樣審查變更。匯入會覆蓋所有答案。
  • 文件:資料安全。

4. 其他 Play 聲明

  • 健康應用程式聲明:每個應用程式都必須完成,即使沒有健康功能。文件。
  • Health Connect:每個權限一個理由;僅請求可見功能使用的權限;一個理由活動 (ACTION_SHOW_PERMISSIONS_RATIONALE) 連結到政策。Play 可能會要求該流程的螢幕錄影。
  • 廣告 ID:聲明是否使用。如果沒有廣告/歸因 SDK,請聲明「否」,並確保沒有依賴項目添加 com.google.android.gms.permission.AD_ID(檢查合併後資訊清單;如果已添加,使用 tools:node="remove" 移除)。
  • 目標對象、內容分級 (IARC)、廣告、應用程式存取權、新聞、金融功能、政府:從庫存中回答。如果任何部分需要登入,請在應用程式存取權中提供審核者憑證。
  • 帳戶刪除:見第 8 節。

5. 隱私清單 (iOS)

  • 將 PrivacyInfo.xcprivacy 添加到應用程式目標(範本:templates/PrivacyInfo.xcprivacy)。
  • 聲明 NSPrivacyTracking、NSPrivacyTrackingDomains、NSPrivacyCollectedDataTypes(與 App 隱私一致)以及應用程式自身程式碼使用的每個必要理由 API 類別的 NSPrivacyAccessedAPITypes:檔案時間戳記、系統啟動時間、磁碟空間、活動鍵盤、UserDefaults。從 Apple 的清單中選擇已核准的理由代碼。Flutter 應用程式透過 shared_preferences 等外掛程式使用 UserDefaults — 檢查每個外掛程式是否附帶自己的清單;添加您的程式碼和沒有清單的外掛程式所使用的部分。
  • 建置後,檢查 App Store Connect 電子郵件/建置警告是否有遺失的清單理由。
  • 文件:隱私清單檔案,必要理由 API。

6. 出口合規 (iOS)

  • Info.plist 中的 ITSAppUsesNonExemptEncryption:當應用程式不使用加密或僅使用豁免加密(例如,透過 OS 的 HTTPS、僅用於保護使用者自身資料的標準演算法,且應用程式的主要功能不是安全性)時,應設定為 false。設定此項可跳過每次建置的問題。
  • 如果您實作或捆綁專有密碼學,或加密是主要功能,請改為回答問題,並檢查是否需要文件或年度自行分類報告。
  • 這是法律分類;如有疑問,請諮詢貿易合規顧問。文件:遵守加密出口法規。

7. 年齡分級

  • 如實回答當前的 Apple 問卷和 Play IARC 問卷,包括有關健康/保健主題、AI 聊天或生成內容、使用者生成內容和無限制網頁存取的問題。
  • 保持分級與您的條款最低年齡和任何應用程式內年齡門檻一致。如果問卷結果低於您的條款最低年齡,請使用商店的選項設定較高分級,而不是留下不一致。

8. 帳戶刪除

  • 應用程式內:如果使用者可以建立帳戶,他們可以在應用程式內開始刪除(帳戶設定)。僅停用是不夠的。訪客/自動建立的帳戶也一樣。允許重新驗證或確認,但不能不必要地困難。Apple:提供帳戶刪除。
  • 網址 (Play):一個頁面,無需應用程式或登入即可存取,標明列表中的應用程式名稱,說明如何請求刪除、刪除什麼以及保留什麼(以及原因),以及任何先決步驟(取消訂閱)。文件:Play 帳戶刪除。
  • 訂閱:刪除帳戶不會取消商店訂閱。在刪除表單中警告並連結到商店的訂閱管理。
  • Sign in with Apple:在刪除時透過 Sign in with Apple REST API 撤銷使用者的令牌。
  • 第三方:也在處理者端刪除使用者(例如 RevenueCat 客戶、分析/當機識別碼、電子郵件清單)。
  • 重新驗證推出:如果您為刪除端點添加重新驗證要求,請在後端變更的同時發布處理新回應的應用程式,或為舊版應用程式保留舊行為。
  • 在所有地方(應用程式、政策、商店表單、網頁)使用相同的路徑用語,例如「個人資料 › 刪除帳戶」。

9. AI 功能

  • Apple 5.1.2(i):揭露個人資料何時與第三方分享,包括第三方 AI,並事先取得明確許可。
  • 首次使用 AI 功能前:一個簡短的同意表單,命名提供者和角色(「由 <AI 提供者> 處理以產生答案」),傳送什麼內容,不用於訓練模型(僅當提供者的條款對您的方案如此說明時),以及保留期限(提供者和您的)。設定中有一個開關可以撤回同意。
  • 政策用語:AI 提供者依照您的指示充當處理者/服務提供者;列出其位置和保留期限。
  • 商店表單:AI 輸入(訊息、照片、文字)屬於已收集資料(使用者內容);當提供者是處理者時,在 Play 上通常「不分享」。
  • 考慮:對於有關健康或財務的 AI 答案,加上「非專業建議」免責聲明,並為危機主題定義安全回應。

10. 健康資料

  • 切勿將 HealthKit / Health Connect 資料傳送給 AI 提供者或其他第三方。 Apple (5.1.3) 限制健康資料的使用和揭露;Health Connect 的政策也限制傳輸。最簡單的合規設計:從 Apple Health / Health Connect 讀取的資料保留在裝置上(或僅儲存在使用者自己的帳戶儲存空間中,並揭露),呼叫 AI 的功能僅使用使用者輸入到應用程式中的資料。
  • 不要將健康資料用於廣告或行銷;不要將其儲存在 iCloud 中。
  • Info.plist 使用字串(NSHealthShareUsageDescription、NSHealthUpdateUsageDescription)必須說明實際用途。如果字串說「絕不與第三方分享」,程式碼必須保證這一點。
  • 在程式碼中強制執行:用於 AI 呼叫的請求建構器採用明確的允許欄位清單;添加一個測試,如果健康資料來源的欄位出現在 AI 負載中,則測試失敗。

需要人工核准的決策點

每份表單的最終答案(帳戶持有人負法律責任)、出口合規分類、年齡分級、AI 提供者及其資料條款、任何離開裝置的健康資料的變更。

驗證

  • 每個表單答案都引用庫存列;庫存引用程式碼。
  • 差異比對:隱私權政策 ↔ App 隱私 ↔ 資料安全 CSV ↔ 應用程式內同意文字 ↔ Info.plist 字串。無矛盾。
  • 測試:刪除測試帳戶;確認後端列、處理者記錄和驗證使用者已消失;網站刪除頁面在登出狀態下可存取。
  • 建置後沒有隱私清單警告。

常見陷阱

  • 政策中說「資料從未離開裝置」,但同步或 AI 功能卻傳送資料。
  • 在表單中忘記自己的匿名當機/使用情況回報。
  • 依賴項目靜默添加 AD_ID 權限。
  • 健康資料透過包含「我們所知的一切」的「上下文」建構器流入 AI 提示。
  • 刪除路徑在應用程式、政策和商店表單中命名不同。
  • 年齡分級為 4+,但條款規定為 16+。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

erberkk/review-readiness

Use before submitting an app version or a first subscription for App Store or Google Play review, or after receiving a rejection. Runs a go/no-go checklist and writes a report - demo account that signs in with a password (no email one-time code), filled with data and premium unlocked; review notes; in-app purchases visible and purchasable (guideline 2.1(b)); iPad compatibility mode for iPhone-only apps; no placeholders or "coming soon"; metadata matching the app; live privacy URLs; crash-free cold start - and gives a playbook for replying in Resolution Center and deciding when to appeal.

erberkk/social-publishing

Use when setting up scheduled publishing of an app's marketing content to Instagram (Reels, carousels, Stories), Threads, X and TikTok through official APIs - self-hosting Postiz in Docker behind a Cloudflare Tunnel, creating the Meta app with the newer use-case flow (business portfolio, Facebook Page linked to the Instagram professional account, Threads tester invite), X developer pay-per-use credits and spend cap, TikTok and YouTube audit limits, safe OAuth account selection when one browser holds personal and brand accounts, resource limits, and phasing a posting calendar around real launch events.

erberkk/store-screenshots

Use when producing or updating App Store and Google Play screenshots and the Play feature graphic - planning a connected "panorama" story across frames, capturing real in-app screens with the app's own test/screenshot harness at each device's logical size and pixel ratio, covering the full device matrix (iPhone 6.9", the required medium Dynamic Island slot, iPhone Duo outer and inner displays, iPad 13" if the app runs on iPad, Play phone, 7" and 10" tablets, 1024x500 feature graphic), checking for alpha channels and wrong sizes, and uploading in order via the App Store Connect and Google Play APIs.

erberkk/web-presence-and-seo

Use when building, checking or deploying the website that a mobile app needs for its store listings and launch - privacy policy, terms, support and web account-deletion pages that work signed-out; hosting apple-app-site-association and assetlinks.json; invite/referral pages (/i/<code>) that open the app or fall back to the store with the Play install referrer; a landing page with store badges and honest per-country prices filled at the edge; Open Graph images; technical SEO (hreflang, canonical, sitemap, robots.txt, JSON-LD); Search Console, Bing Webmaster and IndexNow; AI crawler policy and llms.txt; and a Cloudflare Worker deploy with a production approval gate. Includes a site checker and an IndexNow ping script.

相關技能