呱呱聚合
← 返回基因库
大模型应用

在 App Store Connect 与…

当需要把 ASC 的订阅/IAP 目录与 RevenueCat 的产品、权益、Offerings、Packages 对齐(含补齐缺失项)时使用。

被复用0 次
复用有效—
置信度55%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 wuwilla 的小呱沉淀
GDI C 38/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15

适用场景

在 App Store Connect 特定

解决思路

  1. 先以只读的审计模式开始:读取 ASC 源目录与 RevenueCat 目标目录,构建差异清单,分类为「ASC 缺失」「RevenueCat 缺失」「映射冲突(标识符/类型/应用不匹配)」,并展示计划;纯审计请求到此结束,apply 请求需获得覆盖当前完整差异的批准,若刷新后的差异未变可复用先前批准。
  2. 以 ASC 的 productId 等于 RevenueCat 的 store_identifier 作为跨系统主键;产品上线后保持 productId 稳定;不要用展示名称作为唯一标识。
  3. 明确边界:RevenueCat MCP 只配置 RevenueCat 资源,不直接创建 ASC 产品;缺失的 ASC 订阅组、订阅和 IAP 必须先用 asc 命令创建,再做 RevenueCat 映射。
  4. 读取 ASC 当前目录:运行 asc subscriptions groups list --app "APP_ID" --paginate --output json、asc iap list --app "APP_ID" --paginate --output json,并对每个订阅组运行 asc subscriptions list --group-id "GROUP_ID" --paginate --output json。
  5. 读取 RevenueCat 当前目录:使用 MCP 工具 mcp_RC_get_project、mcp_RC_list_apps、mcp_RC_list_products、mcp_RC_list_entitlements、mcp_RC_list_offerings、mcp_RC_list_packages(带 project_id,必要时分页)。
  6. 按类型映射:ASC 订阅 -> RevenueCat subscription;ASC IAP CONSUMABLE -> consumable;NON_CONSUMABLE -> non_consumable;NON_RENEWING_SUBSCRIPTION -> non_renewing_subscription。
  7. 建议的权益策略:订阅按每个订阅组一个权益(或用户显式提供的映射);非消耗型 IAP 每个产品一个权益;消耗型 IAP 默认不分配权益,除非用户要求。
  8. 补齐缺失的 ASC 项时,先解析所有父级和版本再写入;订阅组按精确 referenceName 匹配、产品按 productId 匹配,绝不把展示名当身份;资源已存在时复用其规范 ID,只有在完整分页读取证明缺失时才运行创建命令;RevenueCat 产品映射不能证明对应 ASC 订阅已可送审。
  9. 解析 GROUP_ID:运行 asc subscriptions groups list --app "APP_ID" --paginate --output json;仅当完整分页列表零精确匹配时运行 asc subscriptions groups create --app "APP_ID" --reference-name "Premium" --output json;一个匹配则复用其 ID,多于一个则停止并要求显式 GROUP_ID。
  10. 解析 SUB_ID:在 GROUP_ID 内按精确 productId 运行 asc subscriptions list --group-id "GROUP_ID" --paginate --output json;仅当完整分页列表零精确匹配时运行 asc subscriptions setup --app "APP_ID" --group-id "GROUP_ID" --reference-name "Monthly" --product-id "com.example.premium.monthly" --subscription-period ONE_MONTH --review-screenshot "./review.png" --price "3.99" --price-territory "USA" --territories "USA" --no-verify --output json;一个匹配则复用其 ID,多于一个则停止并要求显式 SUB_ID;仅对显式批准的同一 product ID 对账才可对已存在 SUB_ID 重跑 setup。
  11. 解析订阅组版本:运行 asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json;零匹配时运行 asc subscriptions groups versions create --group-id "GROUP_ID" --output json;一个匹配则复用 .data[0].id,多于一个则停止并要求显式 GROUP_VERSION_ID。
  12. 解析 GROUP_VERSION_ID 上的 en-US 本地化:运行 asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output json;缺失时运行 asc subscriptions groups versions localizations create --version-id "GROUP_VERSION_ID" --locale "en-US" --name "Premium" --output json;值不同时运行 asc subscriptions groups versions localizations update --id "GROUP_LOC_ID" --name "Premium"。
  13. 解析订阅版本:运行 asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json;零匹配时运行 asc subscriptions versions create --subscription-id "SUB_ID" --output json;一个匹配则复用 .data[0].id,多于一个则停止并要求显式 SUBSCRIPTION_VERSION_ID。
  14. 解析订阅版本本地化:运行 asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output json;缺失时运行 asc subscriptions versions localizations create --version-id "SUBSCRIPTION_VERSION_ID" --locale "en-US" --name "Premium Monthly" --description "Unlock all premium features." --output json;值不同时运行 asc subscriptions versions localizations update --id "SUBSCRIPTION_LOC_ID" --name "Premium Monthly" --description "Unlock all premium features."。
  15. 回读上面选定的确切版本并运行最终严格校验:asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output table、asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output table、asc validate subscriptions --app "APP_ID" --strict --output table。
  16. 解析 IAP_ID:运行 asc iap list --app "APP_ID" --paginate --output json;仅当完整分页列表零精确匹配时运行 asc iap create --app "APP_ID" --type NON_CONSUMABLE --ref-name "Lifetime" --product-id "com.example.lifetime" --output json;一个匹配则复用其 ID,多于一个则停止并要求显式 IAP_ID。
  17. 解析 IAP 版本:运行 asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json;零匹配时运行 asc iap versions create --iap-id "IAP_ID" --output json;一个匹配则复用 .data[0].id,多于一个则停止并要求显式 IAP_VERSION_ID。
  18. 解析 IAP 版本本地化:运行 asc iap versions localizations list --version-id "IAP_VERSION_ID" --paginate --output json;缺失时运行 asc iap versions localizations create --version-id "IAP_VERSION_ID" --locale "en-US" --name "Lifetime" --description "Unlock all premium features." --output json;值不同时运行 asc iap versions localizations update --localization-id "IAP_LOC_ID" --name "Lifetime" --description "Unlock all premium features.";最后运行 asc iap versions localizations list --version-id "IAP_VERSION_ID" --paginate --output table。
  19. 上述相邻的 create/update 对是条件性的而非盲目执行的序列:列表无匹配时创建,解析到的匹配值不同时更新,已一致则什么都不做;从创建响应取 .data.id 或从前置列表取 .data[].id 作为后续命令使用的规范 ID;每个版本列表零个 PREPARE_FOR_SUBMISSION 匹配则创建,一个则复用该 ID,多于一个则停止并要求用户选择显式版本 ID;不要为消除歧义而创建版本,因为实测中父级删除并不能可靠级联删除 IAP 或订阅版本。
  20. 理解 subscriptions setup 的职责:它完成父级、App Review 截图交付、完整 App Store 价格矩阵和销售可用性;版本级命令完成 RevenueCat 无法完成的组和订阅本地化;销售可用性限定在请求的地区,定价仍需 Apple 的完整均衡地区矩阵;此拆分流程中 --no-verify 是有意为之,因为最终验证必须等到版本元数据存在,显式回读和校验器才是最终关卡。
  21. 若已存在的 API 创建的订阅即使所选基础价格未变仍停留在 MISSING_METADATA,用相同 setup 输入加 --repair 重跑;repair 会原子地重建并重新保存完整均衡价格矩阵,它不是重复的单价格 POST。
  22. 对每个解析出的 ASC 订阅,在创建或挂接其 RevenueCat 产品前必须通过最终关卡,即使订阅及其选定版本是复用且未做任何 ASC 写入,也要在最终 ASC 对账后运行:mkdir -p "./audit" 然后 asc validate subscriptions --app "APP_ID" --strict --output json --pretty > "./audit/subscriptions-validation.json"。
  23. 对每个解析出的 ASC IAP,在创建或挂接其 RevenueCat 产品前必须通过 IAP 关卡,即使 IAP 及其选定版本是复用且未做任何 ASC 写入,也要在最终 ASC 对账后运行:mkdir -p "./audit" 然后 asc validate iap --app "APP_ID" --strict --output json --pretty > "./audit/iap-validation.json"。
  24. 这两个命令是严格映射关卡而非写入后冒烟测试:当订阅校验报告警告、错误、MISSING_METADATA、审核截图非 COMPLETE 或定价覆盖不完整/未验证时,不要映射任何解析或复用的订阅;当 IAP 校验报告警告或错误时,不要映射任何解析或复用的 IAP;零写入的审计或 apply 运行也必须执行适用关卡并要求零退出码后才能创建或挂接 RevenueCat 产品;直接重定向可保留校验器的退出状态;保留 ./audit/subscriptions-validation.json 和 ./audit/iap-validation.json 作为最终审计证据。
  25. 确保 RevenueCat 应用和产品:使用 mcp_RC_create_app 创建缺失应用;使用 mcp_RC_create_product 创建产品,其中 store_identifier = ASC productId,app_id = RevenueCat 应用 ID,type 按上述映射。
  26. 确保权益与挂接:使用 mcp_RC_list_entitlements、mcp_RC_create_entitlement 列出/创建权益,用 mcp_RC_attach_products_to_entitlement 挂接产品,用 mcp_RC_get_products_from_entitlement 验证挂接。
  27. 确保 Offerings 与 Packages(可选):用 mcp_RC_list_offerings、mcp_RC_create_offering、mcp_RC_update_offering(仅在请求时设 is_current=true)列出/创建/更新 offerings;用 mcp_RC_list_packages、mcp_RC_create_package 列出/创建 packages;用 mcp_RC_attach_products_to_package 并设 eligibility_criteria: "all" 把产品挂接到 packages。
  28. 推荐的 package key 映射:ONE_WEEK -> $rc_weekly;ONE_MONTH -> $rc_monthly;TWO_MONTHS -> $rc_two_month;THREE_MONTHS -> $rc_three_month;SIX_MONTHS -> $rc_six_month;ONE_YEAR -> $rc_annual;lifetime IAP -> $rc_lifetime;自定义 -> $rc_custom_<name>。
  29. apply 模式按此顺序执行已批准操作:1) 确保 ASC 组/订阅/IAP 存在;2) 确保 RevenueCat 应用/产品存在;3) 确保权益及产品挂接;4) 确保 offerings/packages 及 package 挂接;5) 验证并打印最终对账摘要。
  30. 返回最终摘要,包含:ASC 创建计数(组/订阅/IAP)、RevenueCat 创建计数(应用/产品/权益/offerings/packages)、挂接计数(权益-产品、package-产品)、跳过的已存在项、失败项及可操作的错误,例如:ASC: created groups=1 subscriptions=2 iap=1, skipped=14, failed=0;RC: created apps=0 products=3 entitlements=2 offerings=1 packages=2, skipped=27, failed=1;Attachments: entitlement_products=3 package_products=2;Failures: - com.example.premium.annual: duplicate store_identifier exists on another RC app。
  31. 代理行为:始终先运行审计,即使处于 apply 模式;复用覆盖当前完整差异的批准,仅当批准缺失或有额外/实质性变更的操作超出批准范围时才再次询问;优先按 store_identifier 匹配;使用完整分页(ASC 用 --paginate,RevenueCat 工具用 starting_after);单项失败后继续处理并汇总报告所有失败;绝不自动删除 ASC 或 RevenueCat 资源。
  32. 安全默认:以只读审计模式开始;写入前要求显式确认;此工作流中绝不删除资源;单项失败后继续并在最后报告所有失败。
  33. 避免常见陷阱:错误的 RevenueCat project_id 或应用 ID;在错误平台应用下创建 RC 产品;误把消耗型产品分配到权益;跳过创建后的 ASC 回读步骤;在 ASC 完成本地化、审核截图交付、完整价格矩阵和可用性之前就映射 RevenueCat 产品;产品创建后缺少 offering/package 验证。

适用边界 · 注意事项