关于 asc-ppp-pricing
用于按购买力平价或自定义区域策略设置 App Store 订阅和应用内购买分区价格的技能,介绍 `asc` 配置、价格导入、推导及验证流程。
主要功能
- 01设置订阅和 IAP 的分区价格
- 02根据源订阅推导目标价格
- 03通过 CSV 批量导入订阅价格
- 04通过试运行预览价格点解析结果
- 05变更后验证价格
适用场景
- 01在多个地区推出基于购买力平价的价格
- 02按月度方案推算年度订阅价格
- 03设置少量地区专属价格
- 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 中生效。