其他
当需要在 App Store Connect…
适用于为 Apple 订阅和内购按地区设置、派生、批量导入、计划和验证 PPP 或区域化价格的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 57/100 ×0.15
适用场景
当需要在 App Store Conne特定
解决思路
- 设置凭据:运行 `asc auth login`,或设置 `ASC_*` 环境变量;优先使用 `ASC_APP_ID`,否则显式传 `--app`。
- 选择基准地区,通常为 `USA`,并确定基准价格;如需支持的地区 ID,运行 `asc pricing territories list --paginate`。
- 订阅:新建订阅时用 `asc subscriptions setup` 创建组和订阅、上传 App Review 截图、生成完整均衡价格矩阵并设置销售可用性;示例:`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` 在该拆分流程中是有意的:没有 deprecated v1 localizations 时,父项可保持 `MISSING_METADATA` 直到 v2 步骤完成。
- 列出订阅组版本:`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`。
- 列出组版本本地化:`asc subscriptions groups versions localizations list --version-id 'GROUP_VERSION_ID' --paginate --output json`;仅当 `en-US` 缺失时运行 `asc subscriptions groups versions localizations create --version-id 'GROUP_VERSION_ID' --locale 'en-US' --name 'Pro'`;否则仅当解析出的 `en-US` 名称不同时运行 `asc subscriptions groups versions localizations update --id 'GROUP_LOC_ID' --name 'Pro'`;否则不做任何事。
- 列出订阅版本:`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`。
- 列出订阅版本本地化:`asc subscriptions versions localizations list --version-id 'SUBSCRIPTION_VERSION_ID' --paginate --output json`;仅当 `en-US` 缺失时运行 `asc subscriptions versions localizations create --version-id 'SUBSCRIPTION_VERSION_ID' --locale 'en-US' --name 'Pro Monthly' --description 'Unlock everything'`;否则仅当解析出的 `en-US` 值不同时运行 `asc subscriptions versions localizations update --id 'SUBSCRIPTION_LOC_ID' --name 'Pro Monthly' --description 'Unlock everything'`;否则不做任何事。
- 用表格复查组和订阅版本本地化:`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,不要创建另一个不可删除的版本;每个 localization create/update 也按条件执行:缺失 locale 时创建,解析出的 localization 值不同时更新,已匹配时不操作。
- 说明:`setup` 会根据所选基准价格生成 Apple 完整均衡价格矩阵;该拆分流程把最终验证推迟到 v2 本地化存在后;除该拆分 v2 bootstrap 外,省略 `--no-verify`,让 setup 执行正常读回验证;当工作流由层级驱动时,用 `--tier` 或 `--price-point-id` 替代 `--price`;若已有订阅在相同所选基准价格下仍为 `MISSING_METADATA`,用相同 setup 输入加 `--repair` 原子重建并重新保存矩阵。
- 订阅变更前检查当前定价:先用摘要快照:`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' --paginate`。
- 从一个订阅推导另一个订阅的地区价格:当目标订阅需在各地区保持为源订阅的固定倍数,例如年费接近月费 10 倍时,用 `derive` 预览目标价格点和实际倍数:`asc subscriptions pricing derive --source-subscription-id 'MONTHLY_SUB_ID' --target-subscription-id 'YEARLY_SUB_ID' --multiplier '10' --round nearest --dry-run --output table`。
- 选择价格解析方式:`exact` 仅当计算金额存在于目标阶梯时成功,否则失败;`nearest` 选最近金额,平局时选较低;`up` 选大于等于计算值的最小可用金额;`down` 选小于等于计算值的最大可用金额。
- 确认应用时,命令会抓取当前价格并构建新计划,不复用之前的 dry-run 结果;若应用值必须与已审查值一致,先立即重跑 `--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`。
- `derive` 的源和目标必须是不同订阅,且已有标准 `UPFRONT` 价格;该操作是一次性快照而非持久链接;任一地区无法解析时会在变更前失败关闭;跳过已匹配的目标价格;通过读回验证已应用价格;用 `--territory 'SWE'` 做聚焦预览或分阶段单地区更新;省略则推导所有当前源地区;当未提供 `--start-date` 时,已批准或已上线目标默认安排到明天,因为 `--auto-start-date` 默认 true;传 `--auto-start-date=false` 立即应用,或传明确日期协调发布;该命令不改变订阅销售可用性。
- 批量 PPP 更新首选 CSV 导入并 dry run;示例 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;先 dry-run:`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`。
- CSV 导入说明:`--dry-run` 验证行并解析价格点但不创建价格;`--continue-on-error=false` 提供 fail-fast;必需列为 `territory`、`price`;可选列为 `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'`。
- `set` 说明:加 `--start-date 'YYYY-MM-DD'` 安排未来变更;加 `--preserved` 保留当前价格关系;该命令处理初始定价和后续价格变更。
- 仅在需要时发现原始价格点:`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` 当作不透明 continuation URL;恢复 `equalizations` 或 `adjusted-equalizations` 请求时只传 `--next`,不要带原 owner `--price-point-id`、过滤器、sparse fields、includes 或 limit,因为 continuation 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' --paginate`;版本元数据存在后,可重新运行启用验证的 `asc subscriptions setup` 来复查父项、定价、截图和可用性状态。
- 订阅可用性:底层 subscription-availability 资源在 App Store Connect API 4.4 已废弃;仅当普通 upfront territory availability 仍需时保留该命令族以兼容,Apple 不提供一一替代;对于 Monthly with 12-Month Commitment,改用 `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:新建 IAP 时用 `asc iap setup` 创建产品和初始价格计划;其本地化标志使用 deprecated 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`;若结果为零,运行 `asc iap versions create --iap-id 'IAP_ID' --output json`;若为一个,复用 `.data[0].id`;若多于一个,停止并要求显式 `IAP_VERSION_ID`。
- 列出 IAP 版本本地化:`asc iap versions localizations list --version-id 'IAP_VERSION_ID' --paginate --output json`;仅当 `en-US` 缺失时运行 `asc iap versions localizations create --version-id 'IAP_VERSION_ID' --locale 'en-US' --name 'Pro Lifetime' --description 'Unlock everything forever'`;否则仅当解析出的 `en-US` 值不同时运行 `asc iap versions localizations update --localization-id 'IAP_LOC_ID' --name 'Pro Lifetime' --description 'Unlock everything forever'`;否则不做任何事。
- IAP 版本处理:复用唯一的 `PREPARE_FOR_SUBMISSION` 版本;仅当列表为空时创建;多个匹配时停止并要求显式版本 ID;仅在 `en-US` 不存在时创建本地化,仅当值不同时更新其解析出的 ID,否则不操作;说明:`setup` 默认验证创建的 IAP 和价格计划;用版本范围 list 命令验证版本本地化;用 `--start-date` 做计划定价;需要确定性 tier/ID 时用 `--tier` 或 `--price-point-id`。
- 变更前检查 IAP 当前定价:`asc iap pricing summary --iap-id 'IAP_ID' --territory 'USA'` 和 `asc iap pricing summary --iap-id 'IAP_ID' --territory 'IND'`;返回基准地区、当前价格、预估收益和请求地区的计划变更。
- 发现候选 IAP 价格点:`asc iap pricing price-points list --iap-id 'IAP_ID' --territory 'USA' --paginate --price '9.99'` 和 `asc iap pricing price-points equalizations --id 'PRICE_POINT_ID'`。
- 创建或更新 IAP 价格计划:`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'`;当你有意创建或替换 schedule entries 时使用;深入检查:`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`。
- IAP 应用后验证:再次用 `asc iap pricing summary --iap-id 'IAP_ID' --territory 'USA'` 和 `asc iap pricing summary --iap-id 'IAP_ID' --territory 'IND'`;对未来日期计划,预期看到计划变更而不是当前价格立即更新。
- Base territory first:选择一个基准地区,通常 `USA`;先在那里设置基准价格;从该基准推导更低或更高的地区目标价。
- 分层区域定价:高收入市场接近基准;中等收入市场适度折扣;低收入市场做更强 PPP 调整。
- 表格驱动发布:在 CSV 中建立目标地区列表;dry-run import;修复所有解析失败;应用 import;对最重要地区重新运行 summary 检查。
- 文档和自动化优先用规范命令 `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` 已提供创建后内置验证。
- 尚无单一 first-class 的 PPP before/after diff 命令;应用前后使用当前 summary 命令。
- 价格变更在 App Store Connect 和 storefronts 中可能需要时间传播。
适用边界 · 注意事项
- 不适用于没有 `asc` CLI、App Store Connect 账号/权限或 Apple 平台订阅/IAP 的项目。
- 不适用于非 Apple 平台、非订阅/IAP 商品,或不需要按地区差异定价的场景。
- 若只是国内单一定价、不做 PPP/区域化价格,不必使用这些流程。