mcpField
A
asc-ppp-pricing

asc-ppp-pricing

github.com/rorkai营销与增长1.1k7.3k 次安装2 天前更新
代码仓库

关于 asc-ppp-pricing

用于按购买力平价或自定义区域策略设置 App Store 订阅和应用内购买分区价格的技能,介绍 `asc` 配置、价格导入、推导及验证流程。

主要功能

  1. 01设置订阅和 IAP 的分区价格
  2. 02根据源订阅推导目标价格
  3. 03通过 CSV 批量导入订阅价格
  4. 04通过试运行预览价格点解析结果
  5. 05变更后验证价格

适用场景

  1. 01在多个地区推出基于购买力平价的价格
  2. 02按月度方案推算年度订阅价格
  3. 03设置少量地区专属价格
  4. 04在更新前后检查并验证本地化价格

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/rorkai/app-store-connect-cli-skills --skill asc-ppp-pricing

安装后在 Claude Code 中输入/asc-ppp-pricing确认已加载。

详细介绍

PPP 定价(按地区定价)

使用此技能,根据购买力平价(PPP)或你自己的区域定价策略,创建或更新各地区的本地化定价。

优先使用当前的高级流程:

  • 使用 asc subscriptions setup 和 asc iap setup 创建父级项目并设置定价, 然后使用按版本限定的元数据命令
  • 使用 asc subscriptions pricing ... 更改订阅定价
  • 使用 asc iap pricing summary 和 asc iap pricing schedules ... 更改应用内购买(IAP)定价

优先使用原生 asc 命令。仅当没有原生命令可完成任务时,才使用 asc api;下方的 --resolved 读取结果已包含每个地区的地区、货币、客户价格、收益和价格点 ID。

前提条件

  • 确保已设置凭据(asc auth login 或 ASC_* 环境变量)。
  • 优先使用 ASC_APP_ID,或显式传入 --app。
  • 确定基准地区(通常为 USA)和基准价格。
  • 如需查询支持的地区 ID,请使用 asc pricing territories list --paginate。

订阅 PPP 工作流

新建订阅:使用 setup 初始化父级项目并设置价格

使用 setup 创建群组和订阅、上传 App Review 截图、生成完整的均衡价格矩阵并设置销售可用性。之后创建 API 4.4.1 群组和订阅版本;setup 中的本地化标记使用已弃用的 v1 资源,不得用于新工作流。

asc subscriptions setup \
  --app "APP_ID" \
  --group-reference-name "Pro" \
  --reference-name "Pro Monthly" \
  --product-id "com.example.pro.monthly" \
  --subscription-period ONE_MONTH \
  --review-screenshot "./review.png" \
  --price "9.99" \
  --price-territory "USA" \
  --territories "USA,CAN,GBR" \
  --no-verify \
  --output json

从 setup JSON 中提取 .groupId 和 .subscriptionId,然后添加按版本限定的元数据。此处有意使用 --no-verify:如果没有已弃用的 v1 本地化内容,在 v2 步骤完成前,父级项目可能会保持 MISSING_METADATA 状态。

asc subscriptions groups versions list --group-id "GROUP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc subscriptions groups versions create --group-id "GROUP_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit GROUP_VERSION_ID.
asc subscriptions groups versions localizations list --version-id "GROUP_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc subscriptions groups versions localizations create --version-id "GROUP_VERSION_ID" --locale "en-US" --name "Pro"
# Otherwise, if and only if the resolved en-US name differs:
asc subscriptions groups versions localizations update --id "GROUP_LOC_ID" --name "Pro"
# Otherwise, do nothing.

asc subscriptions versions list --subscription-id "SUB_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc subscriptions versions create --subscription-id "SUB_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit SUBSCRIPTION_VERSION_ID.
asc subscriptions versions localizations list --version-id "SUBSCRIPTION_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc subscriptions versions localizations create --version-id "SUBSCRIPTION_VERSION_ID" --locale "en-US" --name "Pro Monthly" --description "Unlock everything"
# Otherwise, if and only if the resolved en-US values differ:
asc subscriptions versions localizations update --id "SUBSCRIPTION_LOC_ID" --name "Pro Monthly" --description "Unlock everything"
# Otherwise, do nothing.
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" --output table

对于每个版本列表,复用其唯一的 PREPARE_FOR_SUBMISSION 结果。仅当结果为空时才创建;如果返回多个结果,则停止并要求提供明确的版本 ID,而不是再创建一个无法删除的版本。每组本地化内容的创建/更新操作也需满足条件:缺少对应地区时才创建;仅当值不同时才更新已解析的本地化内容;如果值已匹配,则不执行操作。

说明:

  • setup 会根据所选基准价格生成 Apple 完整的均衡价格矩阵。此拆分工作流会延后最终验证,直到 v2 本地化内容创建完成。
  • 除此 v2 拆分初始化流程外,省略 --no-verify,以便 setup 执行常规的回读验证。
  • 如果工作流以价格等级为依据,请使用 --tier 或 --price-point-id,而不是 --price。
  • 如果现有订阅在所选基准价格不变的情况下仍处于 MISSING_METADATA 状态,请使用 --repair 重新运行 setup 输入,以原子方式重建并重新保存矩阵。
更改前检查当前订阅定价

如需简要查看当前状态,请先使用摘要视图。

asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "USA"
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "IND"
asc subscriptions pricing prices list --subscription-id "SUB_ID" --resolved

使用 summary 快速进行更改前后的抽查。prices list --resolved 会返回每个地区当前生效的价格(客户价格、货币、收益、价格点 ID)。该命令不包含未来生效的价格;检查计划变更时,请使用 prices list --paginate 查看原始记录。

从一个订阅推导另一个订阅的本地化价格

如果目标订阅应在每个地区都保持在源订阅的固定倍数附近(例如年付价格约为月付价格的 10 倍),请使用 derive。Apple 的价格阶梯在不同地区的增幅并不均匀,因此在应用前,请预览选定的目标价格点和实际倍数。

asc subscriptions pricing derive \
  --source-subscription-id "MONTHLY_SUB_ID" \
  --target-subscription-id "YEARLY_SUB_ID" \
  --multiplier "10" \
  --round nearest \
  --dry-run \
  --output table

选择 Apple 不提供期望价格时的处理方式:

  • exact:除非目标阶梯中存在计算出的金额,否则失败。
  • nearest:选择最接近的金额;如果距离相同,则选择较低的金额。
  • up:选择大于或等于计算金额的最小可用金额。
  • down:选择小于或等于计算金额的最大可用金额。

确认后的命令会获取当前价格并生成新的计划,不会复用之前试运行的结果。如果必须确保应用的值与审核过的值一致,请在确认前立即重新运行 --dry-run,然后再应用:

asc subscriptions pricing derive \
  --source-subscription-id "MONTHLY_SUB_ID" \
  --target-subscription-id "YEARLY_SUB_ID" \
  --multiplier "10" \
  --round nearest \
  --confirm \
  --output table

源订阅和目标订阅必须是不同的订阅,且都已有标准 UPFRONT 价格。此操作只是一次性快照,不会建立持久关联。只要有任何地区无法确定价格,操作就会在更改前失败;目标价格已匹配的项目会跳过,并且会通过回读来验证已应用的价格。使用 --territory "SWE" 可预览或分阶段更新单个地区;省略该参数则会推导源订阅当前的所有地区。 如果未提供 --start-date,已批准或已上线的目标默认会安排在明天生效,因为 --auto-start-date 默认值为 true。传入 --auto-start-date=false 可立即应用;协调发布时,也可以使用明确的日期。 该命令不会更改订阅的销售可用性。

批量 PPP 更新的首选方式:使用 CSV 导入并试运行

对于大范围 PPP 发布,建议使用订阅价格导入命令,而不是逐个手动添加地区价格。

CSV 示例:

territory,price,start_date,preserved
IND,2.99,2026-04-01,false
BRA,4.99,2026-04-01,false
MEX,4.99,2026-04-01,false
DEU,8.99,2026-04-01,false

先试运行:

asc subscriptions pricing prices import \
  --subscription-id "SUB_ID" \
  --input "./ppp-prices.csv" \
  --dry-run \
  --output table

实际应用:

asc subscriptions pricing prices import \
  --subscription-id "SUB_ID" \
  --input "./ppp-prices.csv" \
  --confirm \
  --output table

说明:

  • --dry-run 会验证行并解析价格点,但不会创建价格。
  • --continue-on-error=false 可启用快速失败模式。
  • CSV 必需列:territory、price
  • CSV 可选列:currency_code、start_date、preserved、preserve_current_price、price_point_id
  • 如果省略 price_point_id,CLI 会自动根据该行的地区和价格解析匹配的价格点。
  • 导入时的地区输入可以是 3 个字母的 ID、2 个字母的代码,或能够准确映射的常见地区名称。
单次订阅地区价格更改

需要少量手动覆盖时,请使用规范的 set 命令。

asc subscriptions pricing prices set --subscription-id "SUB_ID" --price "2.99" --territory "IND"
asc subscriptions pricing prices set --subscription-id "SUB_ID" --tier 5 --territory "BRA"
asc subscriptions pricing prices set --subscription-id "SUB_ID" --price-point "PRICE_POINT_ID" --territory "DEU"

说明:

  • 添加 --start-date "YYYY-MM-DD" 可安排未来生效的更改。
  • 如果要保留当前价格关系,请添加 --preserved。
  • 该命令既适用于初始定价,也适用于之后的价格变更。
仅在需要时发现原始价格点

如果要直接检查 Apple 的本地化价格阶梯,或指定确切的价格点 ID,请使用价格点查询和均衡价格查询。

asc subscriptions pricing price-points list --subscription-id "SUB_ID" --territory "USA" --paginate --price "9.99"
asc subscriptions pricing price-points equalizations --price-point-id "PRICE_POINT_ID" --paginate
asc subscriptions pricing price-points adjusted-equalizations --price-point-id "PRICE_POINT_ID" --upfront-price-point-id "UPFRONT_PRICE_POINT_ID" --plan-type MONTHLY --subscription-id "SUB_ID" --paginate

使用 equalizations 查询 Apple 的标准本地化价格阶梯。如果需要 API 4.4.1 中针对订阅的调整,请使用 adjusted-equalizations。发起新的 adjusted-equalizations 请求时,请传入 --upfront-price-point-id 和 --plan-type;--subscription-id 和 --territory 是可选筛选条件。请将 --next 视为不透明的续传 URL。恢复 equalizations 或 adjusted-equalizations 请求时,只传入 --next,不要再传入原始所有者的 --price-point-id、筛选条件、稀疏字段、包含项或限制数量;续传 URL 已包含这些查询状态。 仍可使用 --paginate 和显式输出标志。

应用后验证

更改后重新运行摘要和原始列表视图。

asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "IND"
asc subscriptions pricing summary --subscription-id "SUB_ID" --territory "BRA"
asc subscriptions pricing prices list --subscription-id "SUB_ID" --resolved
asc subscriptions pricing prices list --subscription-id "SUB_ID" --paginate

版本元数据创建后,可以再次运行启用了验证的 asc subscriptions setup,以重新检查父级、定价、屏幕截图和可用性状态。

订阅可用性

底层的订阅可用性资源已在 App Store Connect API 4.4 中弃用。仅在仍需要普通预付价格的地区可用性时,为兼容性保留此命令系列;Apple 没有为此场景提供一对一的替代方案。对于 12 个月承诺的月度订阅,请改用 asc subscriptions pricing monthly-commitment enable|disable|list。

asc subscriptions pricing availability edit --subscription-id "SUB_ID" --territories "USA,CAN,IND,BRA"
asc subscriptions pricing availability view --subscription-id "SUB_ID"

IAP PPP 工作流

新建 IAP:使用 setup 初始化父级对象并设置价格

使用 setup 创建产品和初始价格计划。其本地化标志使用已弃用的 v1 资源,因此请在 setup 后通过 API 4.4.1 IAP 版本添加本地化信息。

asc iap setup \
  --app "APP_ID" \
  --type NON_CONSUMABLE \
  --reference-name "Pro Lifetime" \
  --product-id "com.example.pro.lifetime" \
  --price "9.99" \
  --base-territory "USA" \
  --output json

从 setup JSON 中提取 .iapId,然后创建版本和元数据:

asc iap versions list --iap-id "IAP_ID" --state PREPARE_FOR_SUBMISSION --paginate --output json
# If and only if the list has zero matches:
asc iap versions create --iap-id "IAP_ID" --output json
# For one match, reuse .data[0].id. For more than one, stop and require an explicit IAP_VERSION_ID.
asc iap versions localizations list --version-id "IAP_VERSION_ID" --paginate --output json
# If and only if en-US is missing:
asc iap versions localizations create --version-id "IAP_VERSION_ID" --locale "en-US" --name "Pro Lifetime" --description "Unlock everything forever"
# Otherwise, if and only if the resolved en-US values differ:
asc iap versions localizations update --localization-id "IAP_LOC_ID" --name "Pro Lifetime" --description "Unlock everything forever"
# Otherwise, do nothing.

重复使用唯一的 PREPARE_FOR_SUBMISSION 版本。仅在列表为空时创建;如果返回多个匹配项,则停止操作并明确指定版本 ID。仅当不存在 en-US 时才创建本地化信息;仅当值不同时才更新解析出的 ID,否则不执行任何操作。

说明:

  • setup 默认会验证创建的 IAP 和价格计划;请使用版本范围的列表命令验证版本本地化信息。
  • 使用 --start-date 设置定时价格。
  • 若要按价格等级或 ID 确定性地进行设置,请使用 --tier 或 --price-point-id。
变更前检查当前 IAP 定价

在 PPP 工作中,使用 asc iap pricing summary 作为当前状态摘要的主要命令。

asc iap pricing summary --iap-id "IAP_ID" --territory "USA"
asc iap pricing summary --iap-id "IAP_ID" --territory "IND"

此命令会返回所请求地区的基准地区、当前价格、预估收益和定价变更计划。

若要获取所有地区的快照,请使用 --resolved 读取价格计划。从 schedules view 的 .data.id 获取计划 ID;它通常与 IAP ID 相同,但请读取该值,不要自行假定。

asc iap pricing schedules view --iap-id "IAP_ID"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --resolved --output table

--resolved 会为每个地区返回一行,其中包含地区、客户价格、货币、收益、价格点 ID,以及价格是否为手动设置。 manual-prices --resolved 和 automatic-prices --resolved 都会合并今天生效的手动价格和自动价格。它们不包括未来日期的条目。不带 --resolved 时,这些命令会返回原始计划记录;检查定时变更时,请使用 --paginate 获取所有页面。

查找候选 IAP 价格点

使用 price-points list 查询一个地区的价格梯度,每次调用仅查询一个地区。--price 会筛选每个获取到的页面,因此务必同时使用 --paginate。

asc iap pricing price-points list --iap-id "IAP_ID" --territory "IND" --paginate
asc iap pricing price-points list --iap-id "IAP_ID" --territory "IND" --paginate --price "299"

仅当需要查看 Apple 根据基准价格点提供的均衡价格梯度时,才使用 equalizations。其行包含价格点 ID、客户价格和收益,但不包含地区或货币,因此不要用它查询特定国家/地区的价格。

asc iap pricing price-points equalizations --id "PRICE_POINT_ID" --paginate
创建或更新 IAP 价格计划

对于手动 PPP 更新,请直接创建价格计划。

asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --price "4.99" --start-date "2026-04-01"
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --tier 5 --start-date "2026-04-01"
asc iap pricing schedules create --iap-id "IAP_ID" --base-territory "USA" --prices "PRICE_POINT_ID:2026-04-01"

只有在有意创建或替换计划条目时,才使用这些命令。若要深入检查:

asc iap pricing schedules view --iap-id "IAP_ID"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --paginate
asc iap pricing schedules automatic-prices --schedule-id "SCHEDULE_ID" --paginate
应用后验证

安排或应用定价变更后,再次使用摘要命令。

asc iap pricing summary --iap-id "IAP_ID" --territory "USA"
asc iap pricing summary --iap-id "IAP_ID" --territory "IND"
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --resolved --output table
asc iap pricing schedules manual-prices --schedule-id "SCHEDULE_ID" --paginate
asc iap pricing schedules automatic-prices --schedule-id "SCHEDULE_ID" --paginate

对于未来日期生效的计划,请对每个已变更地区运行 summary,以验证计划的价格点 ID 和日期;同时保留原始分页读取结果,以获取完整的计划清单。价格生效前,解析后的快照不会包含这些价格。

常见 PPP 策略模式

先设置基准地区
  • 选择一个基准地区,通常为 USA。
  • 先在那里设置基准价格。
  • 根据该基准价格推导其他地区的较低或较高目标价格。
按地区划分等级定价
  • 高收入市场的价格接近基准价格。
  • 中等收入市场提供适度折扣。
  • 低收入市场采用力度更大的 PPP 调整。
通过电子表格分阶段推出
  • 在 CSV 中建立目标地区列表。
  • 试运行导入。
  • 修复解析失败项。
  • 应用导入。
  • 重新运行摘要检查,核验最重要的地区。

说明

  • 在文档和自动化中优先使用规范命令:asc subscriptions pricing ...
  • asc subscriptions pricing ... 是受支持的订阅定价命令系列;不要使用已移除的 asc subscriptions prices ... 路径。
  • 在文档和自动化中优先使用规范的应用内购买(IAP)命令:asc iap pricing ...
  • asc subscriptions pricing prices import --dry-run 是目前最安全的订阅批量 PPP 操作路径。
  • asc subscriptions setup 和 asc iap setup 已提供内置的创建后验证。
  • 目前还没有统一的一流前后 PPP 差异对比命令;请对比用于读取当前价格的 --resolved 结果,以及用于读取计划变更的原始分页记录。
  • 价格变更可能需要一段时间才能在 App Store Connect 和各 storefront 中生效。

评论

支持 Markdown