用编码代理来编写你的合规页面
这些页面需要的事实已经在你的代码仓库里。代理能真正推导出什么、必须问你什么,以及在让它碰这件事之前值得坚持的边界。
一个能读取你代码仓库的编码代理,已经掌握了这些页面所需的事实:应用名称、bundle id、商店链接以及构建中的每个 SDK。借助合适的工具,它会根据这些证据起草页面,并交给你一个审阅链接——由你检查并发布。
几分钟就能搞定
AppFoyer 托管本指南所讲的页面——隐私政策、服务条款、支持、账号删除和 app-ads.txt——放在它们自己的子域名上,你无需自己的域名或服务器。一个应用免费,而且商店要求的任何内容都绝不放在付费墙后面。
核查于 2026年9月25日。 商店政策会变,有时不会事先通知。下文所有内容都链接到官方文档,以那个页面为准,而不是本页。如果两者不一致,以商店为准。 本指南译自英文;引用的商店文档保留英文原文。
写隐私政策主要是誊写工作。难的部分——弄清楚你的应用到底收集了什么——答案就在你代码仓库现有的文件里,而这正是拥有文件系统访问权限的代理擅长的工作。
代理能真正推导出什么
仅凭构建文件,无需问你任何问题:
| 事实 | 来源 |
|---|---|
| 应用名称 | strings.xml app_name、CFBundleDisplayName、pubspec.yaml、app.json |
| Application id / bundle id | Gradle 中的 applicationId,Xcode 项目中的 PRODUCT_BUNDLE_IDENTIFIER |
| 平台 | 上述文件中存在哪些 |
| 数据收集 | build.gradle、Podfile、Package.swift、pubspec.yaml、package.json 中的每个第三方 SDK |
| 权限和用途说明字符串 | AndroidManifest.xml、Info.plist |
| 广告发布商 ID | manifest 或 plist 中的 AdMob 应用 ID |
| 建议的 Play URL | 根据 application id 拼出——这是建议,不是事实,因为应用可能尚未上架 |
这张表就是隐私政策的实质内容。它也是“我的应用收集了什么”这个问题的答案——大多数开发者凭记忆答错、靠阅读文件才答对的问题。
它无法知道、必须询问的内容
一个编造这些内容的代理,比没有代理更糟:
- 你的法律实体名称,以及你的条款中指定的司法管辖区。
- 你真正会查看的支持邮箱。它绝不能从 git 配置或 fastlane 文件中找到的 Apple 开发者登录账号去猜。
- 你真实的 App Store id,除非它在 fastlane 配置中——这个数字 id 是无法推导出来的。
- 应用是否已上线,以及对应哪个商店页面。
- 业务事实:你是否销售订阅、儿童是否是目标受众、你是否与某个在依赖列表中不留痕迹的合作伙伴共享数据。
- 任何关于你后端的信息。代码仓库里没有任何东西能说明你把数据保留多久。
好的结果是这样的:所有能推导的都推导出来,并附上来源文件和行号;剩下的是一份只有你能回答的简短问题清单。
值得坚持的边界
在让任何代理碰这件事之前,先确定下面几点——它们决定了这是一个有用的工具还是一个隐患:
- 没有人工点击,就不发布任何内容。一个生成的法律页面未经审阅就上线——整个风险用一句话就说完了。
- 每个推导出的事实都可溯源。“我在
app/build.gradle:47找到了firebase-crashlytics”是可以核查的;“你的应用收集诊断数据”则不是。 - 它不提交、也不推送代码。提出一个 diff 是帮忙;改写你的仓库则不是。
- 它只把最少的内容发出你的机器。在本地推导事实、只发送结论,与上传你的源代码是截然不同的两件事。
- 它会说出自己不知道什么。一个用貌似合理的句子填补占位符的代理,产出的是一份包含猜测的合规文件。
对这一类中的任何工具都问这五个问题,包括我们的。
人在哪些环节参与
代理起草;你来决定。具体来说,由你来:
- 确认它无法推导的问题;
- 阅读第三方那一节,这是审核人员拿来与你的 Data safety 表单对照的部分;
- 决定数据保留期限,因为只有你了解你的后端;
- 点击发布;
- 填写商店后台的字段——任何代理都不应该进入你的 Play Console。
如果你的应用涉及金钱、健康数据或儿童,这份清单上仍然应该有一小时的律师咨询。根据证据起草的模板,比一张白纸是更好的起点;但它不是法律建议。
AppFoyer 在这里做什么
我们有一个 Claude Code 插件。安装后,说 “make this app store-ready”,技能就会读取你的构建文件,推导出上面那张表,并为每个事实附上文件和行号,只询问它找不到的内容,然后起草全部五个页面以及 app-ads.txt。之后它会在控制台中给你一个审阅 URL。
上述边界是被强制执行的,而不只是承诺。代理的凭据只能使用一组固定的工具——列出和读取应用、创建应用(每个 flavor 一个)、更新设置、起草页面、app-ads.txt、检查清单、应用图标和自定义地址——而发布不在其中:request_publish 给你的是一个链接,而不是一个上线的页面。图标和地址是仅有的两项没有草稿步骤的内容,所以代理在设置它们时会告诉你,而且不会在未询问的情况下替换你已经在使用的地址。代理不能发布、取消发布、删除应用、修改通知渠道,也不能接触你的删除请求收件箱;这些都是仅限会话的操作,由你自己执行。完整的工具列表和实际示例见代理文档页面。该技能从不提交或推送代码,只有在你要求它把最终 URL 接回应用时,才会提出一个 diff。
如果你的代理不是 Claude Code——比如 Cursor、Codex 或某个聊天助手——隐私页面提供了一条复制粘贴的途径:编辑器会给你一段已经填好你应用信息的提示词,你在任何地方运行它,再把回复粘贴回来。这段提示词以及它为什么这样措辞,见用 AI 助手编写你的隐私政策。
如果你没有代理,同样的功能也以一个简短表单的形式提供。代理途径更快,是因为答案已经在你的代码仓库里——它并不是另一个产品。
权威来源
- Provide information for Google Play’s Data safety section — Google Play 管理中心帮助,说明 SDK 的数据需要由你来声明
- App privacy details on the App Store — Apple
- Privacy and security in Firebase — 代理会读取的按 SDK 披露信息的一个示例