作者:iHTCboy
本文介绍了苹果 App Store 的新定价机制,是 App Store 在 15 周年之际推出的最重要价格升级。 文章通过“为什么,是什么,怎么办”的方法论,让读者从根本原理上理解新机制的意义、背后的原因以及应对方式。对苹果 App Store 新定价机制最全面和最详尽的解读,相信会让关注的苹果开发者能快速了解,因此本文力求让开发者们从容应对新的价格系统,并掌握 App Store 新定价机制。
一、前言
大家好!我们在上一篇文章 《关于 App Store 苹果商店价格的那些事(历上最全版)》 介绍了苹果 App Store 价格的历史,2023 年 3 月 9 日苹果正式上线新的 App Store 的定价机制,有非常多的朋友表示对新机制一知半解,好像懂又好像完全不懂,因为苹果这次升级是完全推翻了之前的价格等级(Price Tier
),颠覆了大家对它的认知,推出新的 “自定义价格”(customer Price
),这正是本文要解答的重要内容之一。
App Store 新定价机制 是苹果 App Store 在 15 周年之际推出的最重要价格升级!我们之前文章已经提及其中一部分的原因,本文我们就一起重新学习!从入门到精通新定价机制的原理,充分了解新机制背后的原因和解决的问题,从而可以轻松应对新的风险和机遇。
注:本文很多内容,是假设读者已经阅读过 《关于 App Store 苹果商店价格的那些事》 的前提下展开编写,所以本文会多次提及前文内容但不会细讲,所以未看过的读者,建议先阅读,再读本文。
本文会从“为什么,是什么,怎么办”的思路编写,让大家知道为什么改变,改变了什么内容,这些内容更新和配置会带来什么影响,开发者怎么适配等等,从而认每位开发者都能全面地掌握 App Store 定价机制。
所以本文就带大家一起深入浅出地学习!如果喜欢本文,记得点个赞呗~
二、App Store 旧的定价机制
首先,我们先了解一下 App Store 平台的商业模式:
- 付费 App
- 免费 App 内的广告
- 免费 App 的内购(IAP)
- 订阅(IAP)
所以,App Store 的价格设置,主要是 2 个维度,App 级别和 IAP 级别。 记得这个级别的区别,后续讨论的配置都是基于这个前提的。
2.1 为什么要增加新价格
为什么要增加新价格? 或者这样反问:现有价格点不能满足那些需求呢?
跨国差异。举例来说,假设一款应用程序在美国的价格为 2.99,但由于汇率和购买力等因素的影响,在印度,该应用程序的售价可能过高,当地顾客就会觉得太贵,导致销售量下降。有没有办法让不同地区的价格不一样,我们之前文章说过,2014 年苹果在中国大陆推出 备用等级
“1 元区”,正是针对中国大陆的用户习惯,当年大家买一份报纸就是 1 元!
而如今 2023 年,全球那么多国家和地区,如果都单独增加一些特殊价格的 备用等级
,理论上是可行的,但为什么不这样做,可能当年中国区 1 元价格是因为中国市场是巨大的(事实上也证明了),所以其它国家/地区苹果没有动力做?
缺乏灵活性。另一个例子,最近全球汇率波动大,各个国家或地区的税率政策变化频繁,正如我们之前文章说过,仅 2022 年苹果价格调整就有高达 4 次,这么频繁的调价对于一般 App 可能影响没有这么大。但如果是对于量级大的 App 或游戏,因为价格的调整,会导致 App 充值生态、结算和对账混乱等问题,影响的范围会非常的深远!
2.2 ”价格等级”(Price Tier)
那么,苹果新定价机制升级了那些内容呢?我们先从 价格点(Price Points)说起,了解旧价格机制,对比新价格机制,然后说明新价格机制的优缺点。
我们之前文章说过,苹果一直以来都是根据 产品定价等级表 来设置付费 App 和 IAP 内购商品的价格,例如:
产品定价等级 | 价格(USD) | 价格(CNY) | 等级说明 |
---|---|---|---|
1 | 0.99 | 6 | 等级 1 |
2 | 1.99 | 12 | 等级 2 |
3 | 2.99 | 18 | 等级 3 |
4 | ... | ... | ... |
5 | ... | ... | ... |
简单来说,如果开发者设定价格为:产品定价等级 1
,则表示价格在 USD(美元)结算的国家或地区,用户支付金额为 0.99 美元,在中国大陆 CNY(人民币)则是 6 元。(注:未考虑税费问题)
苹果这个定价等级关系,同一个定价等级在不同货币之间是一一对应的关系,开发者不能改变映射的价格关系。也就是说,产品定价等级 1
的 USD 0.99 美元价格不能设置 CNY(人民币)为 12 元。也不支持,自定义设置价格,比如产品定价等级上没有的价格,例如 USD 1.68 美元、CNY 4 元、CNY 9 元等等。
扩展知识:为什么美元 USD 不是只有美国才用?因为苹果在 175 个国家和地区的商店,目前只有 45 种货币为产品定价。也就是有 130 个国家或地区使用的是美元(USD)或欧元(EUR)等等同一种货币结算。
综上,苹果旧的 ”价格等级”(Price Tier) 机制,已经不能完全适应如今的市场需求。“自定义价格”(Customer Price) 应运而生!
三、App Store 新的定价机制
2023 年 3 月 9 日苹果正式上线新的 App Store 的定价机制,大概更新的内容:
- 更为灵活的价格点。
- 可在 900 个价格点中选择定价 — 比此前付费 App 和一次性 App 内购买项目的可选价格点数量增加了近 9 倍。这些选项也提供了更高的定价灵活度,价格点按价格区间逐渐递增 (如在 RMB 10 以下每档相差 RMB 0.5;RMB 10 到 RMB 200 之间每档相差 RMB 1 等)。
- 增强的全球定价机制。
- 全球均衡价格遵循了各个国家或地区最常见的定价方式。采用全球均衡价格,你可以提供更适用于当地顾客的定价。
- 根据基准价格提供全球定价形式。
- 针对付费 App 和一次性 App 内购买项目,指定你熟悉的国家或地区,以之为基础为其他 174 个国家或地区的店面以及 43 种货币生成全球均衡价格。你为这个基准店面设定的价格,Apple 不会根据税款或外汇变化进行调整。此外,你也可以按个人喜好为每个店面自行设定价格。
- 为上架产品提供地区性定价方案。
- 针对不同国家和地区的店面决定 App 内购买项目 (包括订阅) 的销售范围,因此你可以为各个市场分发定制的内容和服务。
下面,我们就一个一个来讲解。
3.1 更为灵活的价格点 --- “自定义价格”(customer Price)
怎么理解 更为灵活的价格点 ?
从现在开始,我们要摒弃 ”价格等级”(Price Tier)
的理念,从今世间再无价格等级表!
苹果全新的“自定义价格”(customer Price
) 矩阵表:
注:因为价格矩阵表过大,上图只展示部分国家/地区的部分价格点,用于本文参考示例。
扩展知识:苹果针对不支持当地货币的国家或地区,统一使用美元来结算,如上图中的中国澳门
MAC(USD)
。
从上图片可以直观看出,使用 自定义价格(customer Price
) 来统称价格点。我们以美国(美元)为基准时,可以得到以下结论:
价格点按价格区间逐渐递增
注:上图价格点区间图表,下载链接 www.apple.com.cn/newsroom/pd… 。
价格点区间,规则说明示例:
- 中国(人民币):在 RMB 10 以下每档相差
RMB 0.5
;RMB 10 到 RMB 200 之间每档相差RMB 1
等。 - 美国(美元):在 USD 0.1
;USD$ 10 到 USD$ 50 之间每档相差
USD$ 0.5` 等。
注:为什么是
USD$
呢?在$
前增加USD
,是因为$
不只是美元。我们之前在 游戏出海本地化概述 文章中有讨论过:“$” dollar 使用的国家或地区:
- 港币: HongKong dollar
- 台币: New Taiwan dollar
- 新西兰元: New Zealand dollar
- 澳元: Australian Dollar
- 新币(新加坡币): Singapore dollar
- 加元(加拿大元): Canadian dollar
以上这些价格点的区间,大家可以不用记住,大概了解最低和最高价格点,然后在苹果 ASC
(App Store Connect,下文统一简称 ASC) 后台下载 “自定义价格”(customer Price
) 矩阵表,就能查看所有国家或地区的价格点。下载的方法有 2 个:
- 价格与销售范围 -> 价格时间表 -> 所有价格和货币 -> 可用价格(按国家或地区) -> 下载所有价格和货币
- App 内购买项目 -> 价格时间表 -> 所有价格和货币 -> 可用价格(按国家或地区) -> 下载所有价格和货币
苹果总计有 900 个价格点,其中在 “自定义价格”(customer Price
) 矩阵表里面有 800
个价格点,从 USD 1000(人民币 RMB 1 ~ RMB 7499)。另外 100 个高价价格点可通过 申请 (需要登陆开发者账号)获得。100 个高价格点是从 USD 10000(人民币 RMB 7997 ~ RMB 74999)。
3.2 增强的全球定价机制 --- 全球均衡价格
全球均衡价格遵循了各个国家或地区最常见的定价方式。采用全球均衡价格,你可以提供更适用于当地顾客的定价。
那么什么是 全球均衡价格
呢?在 ASC 后台,价格与销售范围(或 App 内购买项目) -> 价格时间表 -> 所有价格和货币,可以打开下面的页面:
我们选择一个国家或地区和价格点后,苹果将根据最新的外汇汇率自动计算所有 175 个国家或地区的价格和收入。
我们在来对比一下 “自定义价格”(customer Price
) 矩阵表,以下,我们以美国 USD$ 0.99 价格点来分析一下:
从上图我们有 2 种颜色,分别是 USD 1.99,对应的部分国家和地区的全球均衡价格:
USA (USD) | CHN (CNY) | HKG (HKD) | TWN (TWD) | MAC (USD) | JPN (JPY) | KOR (KRW) |
---|---|---|---|---|---|---|
0.99 | 8 | 8 | 30 | 0.89 | 100 | 1100 |
1.99 | 15 | 18 | 60 | 1.99 | 300 | 3300 |
可以看出来,USD$ 0.99
价格点,现在苹果的全球均衡价格系统,认为在中国的价格是人民币 RMB¥8
。(注:如果用以前的价格等级(Price Tier)是 CNY¥6,JPY¥160)
所以,开发者需要注意!“自定义价格”(customer Price
) 矩阵表,不再是一一对应关系,列表上的不同国家或地区,可以映射为价格相差很大的不同价格点! 那么怎么配置不同的价格点映射,下文会讲到,这里先跳过。
所以,现在明白苹果说的以下 2 点内容了吧:
- 遵循各个国家或地区最常见的定价方式
- 提供更适用于当地顾客的定价
3.3 根据基准价格提供全球定价形式 --- 基准国家或地区
针对付费 App 和一次性 App 内购买项目,指定你熟悉的国家或地区,以之为基础为其他 174 个国家或地区的店面以及 43 种货币生成全球均衡价格。你为这个基准店面设定的价格,Apple 不会根据税款或外汇变化进行调整。此外,你也可以按个人喜好为每个店面自行设定价格。
怎么理解 基准店面设定的价格 呢?
我们以前配置 App Store 价格,是以价格等级(Price Tier) 美元为基准。很简单就可以明白,那现在我们怎么选择国家/地区和货币为基准呢?
答案就是:根据我们上面介绍的 “自定义价格”(customer Price
) 矩阵表和全球均衡价格系统。苹果现在允许我们选择 3 种定价方案策略:
- 全球价格调整:Apple 将为所有国家或地区提供相应价格,并可能根据税率或外汇汇率的变化在未来调整部分价格。
- 临时价格调整:若想在特定国家或地区进行一段时间的促销,建议采用此方法。在此期间,Apple 不会调整任何价格。
- 自定价格调整:你可以手动管理所有国家和地区的价格,或只管理特定国家或地区的价格。
3.3.1 全球价格调整
简单来说,就是苹果根据全球均衡价格系统,自动帮你调整不同国家或地区的更适用于当地顾客的定价,你不用操心!?
那么,怎么做到苹果自动调整定价呢,就要开发者设定一个基准国家或地区
。比如设置:
- 基准国家或地区:中国大陆(CNY)
- 基准价格:人民币
RMB¥8
那么苹果的全球均衡价格系统,就会计算剩下的其他 174 个国家或地区的店面以及 43 种货币生成全球均衡价格。
这就是自动定价~ 但需要注意,此时,中国大陆作为基准,所以中国大陆的价格,并不会随着全球汇率的变化而价格调整,因为,其它 174 个国家或地区的价格,要通过中国大陆的价格来计算汇率从而自动调整,明白了吧?
3.3.2 自定价格调整
就是你可以自由的不同国家或地区的价格点:
- 全部国家或地区,开发者自己选择自定的价格点
- 部分国家或地区,开发者自己选择自定的价格点,剩下的国家和地区,根据全球均衡价格系统自动调价
自定价格,可以理解为“固定”价格,相当于开发者写死的价格,它不会跟进汇率和全球均衡价格系统的价格调整。
3.3.3 临时价格调整
如促销或汇率变化等原因,开发者可以选择一段时间的一些国家或地区的价格调整,调整的方法为 自定价格调整。
以上就是 基准国家或地区
的作用!
3.4 提供地区性定价方案 --- 销售范围
针对不同国家和地区的店面决定 App 内购买项目 (包括订阅) 的销售范围,因此你可以为各个市场分发定制的内容和服务。
以前,苹果 IAP 购买并不能限制购买的用户所在的国家或地区,IAP 配置只有一个勾选或不勾选“准许销售”,用来决定内购商品是可以购买或不能购买。
现在苹果允许开发者选择 IAP 上架的国家或地区:
没有勾选的国家或地区所在地的苹果账号,不能购买此 IAP 商店。(注:具体的规则和效果,下文会单独讲解。)
苹果建议:
如果你计划更改 App 内购买项目的销售范围,请考虑用户可能会受到的影响,以及如何妥善地通知用户。
为确保用户体验,建议你先完成以下准备工作,再下架 App 内购买项目:
- 通知用户 App 内购买项目即将下架,并至少提前 31 天停止在 App 内销售要删除的 App 内购买项目。这一步的目的是让用户有时间充分使用之前购买的消耗型 App 内购买项目产品。你可以通过电子邮件、网站公告和 App 内消息等方式来通知用户。
- 结束相应的推广活动,以免更多用户购入该 App 内购买项目。
- 将下架 App 内购买项目的计划告知 Apple。Apple 有权要求你为未完成的 App 内购买项目提供退款。
详细参考:为 App 内购买项目设置销售范围
以上,就是苹果 App Store 的新定价机制的全部内容!你理解了吗,给一个点赞吧~
3.5 总结 App Store 新定价机制
新的 App Store 的定价机制的优点:
- 为了给开发者提供更多的定价选择和灵活性,可以根据不同的国家或地区、市场需求和消费能力来设置合适的价格。
- 为了让开发者更容易管理汇率波动、税率变化等因素,避免造成收入损失或不公平。
- 为了让用户有更多的选择空间和体验,增加他们对 App 的兴趣和满意度。
缺点/不足:
- 价格点太多,如果上架多个国家或地区,配置流程复杂
- 2023 年 5 月 9 日后不再保留和支持使用 “价格等级”(Price Tier)
四、App Store 新定价机制的配置和规则
注意! 现在开发者,就可以针对已经上架或者准备上架的 App 设置价格,选择基准国家或地区或销售国家/地区等。
前面,我们提到,配置价格,有2个级别:
- 付费 App
- App 内购买/订阅(IAP)
而定价方案,开发者可以选择 2 个价格配置:
- 全球价格:根据全球均衡价格系统,自动调价
- 自定价格:开发者手动设置固定的价格点
下面,我们将从 3 个维度,分析不同场景下的配置区别:
- 开发者什么都不配置(不处理)
- 开发者只设置 App 级别的基准国家或地区
- 开发者设置 App 级别和 IAP 级别的基准国家或地区
4.1 开发者什么都不配置(不处理)
如果开发者现在已上架的 App 什么都不处理,到 2023 年 5 月 9 日,现有 App 和一次性 App 内购买项目还没有完成价格更新,那么苹果 将以产品当前在美国店面的价格为基础,为它们生成相应的更新价格。
简单来说,就是以美国(美元)为基准国家或地区,根据以前的价格等级(Price Tier)的美元价格,通过全球均衡价格系统,分别设置不同的国家或地区的价格。
4.2 开发者只设置 App 级别的基准国家或地区
如果开发者修改了 App 级别的 “基准国家或地区”,那么未设置 IAP 基准国家或地区会继承使用 App 级别的基准国家或地区
App 级别的 “基准国家或地区”,是指 ASC 的 App 下面的 价格与销售范围
标签下配置。
那么这个 App 下的所有未设置 IAP 基准国家或地区的内购买商品(IAP),都将以 App 级别的基准国家或地区,来自动计算不同国家或地区的全球价格。
举例来说:
- IAP 商品档位 Tier 1:
USD $0.99
,对应人民币CNY ¥6
- 基准国家或地区:App 级别设置为
中国
;IAP 级别(未选择) - 自定价格的国家或地区:无配置
以上的 IAP 商品,当 App 级别的基准国家或地区设置为中国大陆
时,IAP 的价格不会马上进行调整。
当有新的价格平衡生效(全球均衡价格系统价格调整),例如目前苹果确认 2023 年 5 月 9 日会生效!
根据目前苹果全球均衡价格矩阵表,可以查到以中国大陆基准国家或地区 CNY ¥6
最新的价格矩阵:
- 美国 (USD):$0.99
- 日本 (JPY):¥100
注:“全球均衡价格矩阵表”可参考 3.2 全球定价机制章节
所以,2023 年 5 月 9 日(新的价格平衡生效),这个 IAP 商品在美国还是 USD $0.99
,但日本从等级价格(Tier 1 )原来的 JPY ¥160
,变成全球均衡价格系统给出的 JPY ¥100
。其它的国家或地区类似推导。
简单来说,要先设置 IAP 商品的基准国家或地区。然后决定是否要使用全球均衡价格。否则,苹果默认使用全球均衡价格系统,自动算各国家地区的价格,新价格可能会比原价格高,或者低,所以开发者需要自行检查和决定。大家明白这个意思了吧?
4.3 开发者设置 App 级别和 IAP 级别的基准国家或地区
如果开发者设置了 IAP 内购买的基准国家或地区,则 IAP 内购买会以当前 IAP 的基准国家或地区为准。并且如果选择全球均衡价格时,各国家地区的价格,会马上生效!!!
举例来说:
- IAP 商品档位 Tier 1:
USD $0.99
,对应人民币CNY ¥6
- IAP 基准国家或地区:IAP 级别设置为
中国
- 自定价格的国家或地区:无配置
根据目前苹果全球均衡价格矩阵表,可以查到以中国大陆基准国家或地区 CNY ¥6
最新的价格矩阵:
- 美国 (USD):$0.99
- 日本 (JPY):¥100
注:“全球均衡价格矩阵表”可参考 3.2 全球定价机制章节
注意此时此刻,这个 IAP 商品的各国家和地区的价格会马上生效! 如在美国还是 USD $0.99
,但日本从等级价格(Tier 1 )原来的 JPY ¥160
,变成全球均衡价格系统给出的 JPY ¥100
。其它的国家或地区类似推导。
简单来说,目前苹果的全球均衡价格系统已经可用啦!开发者设置 全球价格调整
,则价格会根据全球均衡价格马上调整并生效!
4.4 基准国家或地区的规则总结
所以,关于基准国家或地区的生效规则 总结:
- App 级别的基准国家或地区没有设定:以美国为准
- 如果设置了 App 级别的基准国家或地区,则 IAP 内购买会以 App 级别的基准国家或地区为准【新的价格平衡时生效】
- 如果设置了 IAP 内购买的基准国家或地区,则 IAP 内购买会以当前 IAP 的基准国家或地区为准【马上生效】
4.5 销售范围的规则
目前 ASC 后台最新支持配置的销售范围,有 2 个级别:
- App 级别的销售范围
- App IAP 内购买项目的销售范围
4.5.1 App 级别的销售范围
- 只是针对 App Store 是否可以下载的配置,跟内购商品是否可以购买无关
- 在苹果新机制实行前,内购商品是无限制地区,所有地区都能购买。(以前只能开发者自己根据用户 ip 或苹果账号地区等限制购买)
4.5.2 IAP 内购买项目的销售范围
IAP 内购商品的销售范围
是新增的配置项- 此配置项,与 App 级别的完全单独,相互不影响。
- IAP 内购商品的销售范围配置,是每个内购商品单独配置,相互不影响。
- 只有勾选的国家或地区,对应的用户 Apple ID 账号才能购买和支付成功,否则无法购买。
4.6 App Store Connect API 支持
以上讲到的配置,如果是全球发行的 App,那么在 ASC 后台人工一个个配置会非常繁琐,所以可以通过 App Store Connect API 进行配置:
- 管理基准国家或地区
- 管理付费 App 或 IAP 生效的国家或地区
- 管理价格价格时间表
- 读取有效价格信息
- 添加、修改或删除 IAP
App Store Connect API version 2.3 支持以上新价格机制功能的自动化配置,另外可以下载 OpenAPI 规范文档 了解接口的参数和格式要求等。
注:我们后续会单独写一篇文章来说明新 API 的使用示例,敬请期待和关注我们~
五、测试和疑问解答
5.1 苹果全球均衡价格系统(新的价格平衡)调整的时间节奏
答:目前苹果最新的调整时间为 2023 年 5 月 9 日。后续可能是每个季度调整一次,需要注意的是,不是每个国家或地区都会有价格调整,苹果会定期在各地区根据税款和外币汇率变化更新定价,会根据金融数据机构提供的公开汇率信息更新定价,确保 App 内购买内容的定价在所有商店中保持平衡。
App Store 的全球平衡工具将为开发者提供简单便利的方式,在国际市场中管理定价。当然,开发者可随时根据税款和外币汇率的变化自行调整定价。
5.2 订阅类型价格调整
苹果在去年 2022 年 5 月 16 日的 订阅通知更新 公告中说明:当自动续期订阅提价时,订阅者必须在 App 提价之前选择接受。
。
所以,根据苹果全球均衡价格系统,如果自动调整价格是涨价会怎么样呢?
【2023-04-21】更新 之前的回答有错误,苹果的新价格机制,不会影响到自动续期订阅产品! 管理自动续期订阅的定价:
汇率变化和税务调整会如何影响自动续期订阅的价格?
Apple 不会对你的自动续期订阅产品进行价格调整。Apple 可能会针对税务变化和重大汇率变动调整零售价格,但价格调整不涉及自动续期订阅。请注意,由于你的收益和 Apple 的佣金均在扣除增值税(VAT)之后计算,因此 VAT 税率变化会影响你的收益。你可以选择调整你的订阅价格,以减少税务或外汇变化对你的收益造成影响。
所以,关于自动续期订阅产品不会使用全球均衡价格系统,也不会自动涨价。而提高自动续期订阅价格,全权由开发者决定,需要订阅者同意的情况:
- 订阅者所在的地区要求任何价格变动都需要征得订阅者的同意。
- 价格涨幅:
- 超过当前价格的 50%,并且每期的价格变动超过下方列出的门槛值。
- 门槛值:非年度订阅约为 5 美元,年度订阅约为 50 美元。
- 对于不使用美元定价的地区,门槛值将按当前汇率换算得出。请注意,门槛值会随外汇汇率和税务政策的变化而变动。查看 各个国家或地区的价格涨幅门槛值。
- 在过去 12 个月内,订阅者经历过一次该订阅的价格上调。
详细参考官方文档:管理自动续期订阅的定价
5.3 新创建的 App 或 IAP 项目的配置
新创建的 App 或 IAP 内购买项目,苹果默认都没有配置销售范围和价格时间表,需要开发者按最新的定价规则进行配置:
5.4 限制销售范围
如果苹果后台配置了限制地区,当限制地区的用户点击 App 内购买项目支付时,苹果 StoreKit 会有相应的异常错误,表示用户当前账号地区不在销售范围内。
笔者使用线上 App 的 IAP 项目测试,结果如下:
- App 级别有选择的地区,但 IAP 项目不在销售的地区:
不能购买
- App 级别有选择的地区,且 IAP 项目在销售的地区:
可以发起支付
- App 级别没有选择的地区,且 IAP 项目不在销售的地区:
不能购买
- App 级别没有选择的地区,但 IAP 项目在销售的地区:
可以发起支付
所以,一句话总结,IAP 项目不在销售的地区,该地区的苹果账号无法完成购买支付!
苹果 StoreKit 会有相应的异常错误,会在 2 个支付环节报错:
- 在 productsRequest(_:didReceive:) 方法回调的
SKProductsResponse
中有一个 invalidProductIdentifiers 属性,当数组有值时,里面包含的 IAP 项目就是不在当前用户登陆的 App Store 商店账号的国家或地区销售的 IAP 项目。 - 在 paymentQueue(_:updatedTransactions:) 方法回调的
SKPaymentTransaction
中有一个属性 SKPaymentTransactionState ,当状态为 .failed 时,从 error 属性会有一个"不提供此项目。"
错误异常。
以下是 SKPaymentTransactionState
报错内容的示例:
print("paymentQueue: error: \(transaction.error)");
中文环境:
<SKPaymentQueue: 0x2824b0250>: Payment completed with error: Error Domain=ASDServerErrorDomain Code=3502 "不提供此项目。" UserInfo={storefront-country-code=CHN, client-environment-type=Sandbox, AMSServerErrorCode=3502, NSLocalizedDescription=不提供此项目。}
日文环境:
<SKPaymentQueue: 0x2809d5d30>: Payment completed with error: Error Domain=ASDServerErrorDomain Code=3504 "このアイテムは見つかりませんでした。" UserInfo={storefront-country-code=JPN, client-environment-type=Production, AMSServerErrorCode=3504, NSLocalizedDescription=このアイテムは見つかりませんでした。}
为什么会在 2 个支付环节报错呢?
因为这样才能保证不会存在支付漏洞,很多开发者或非法用户,可能跳过 productsRequest(_:didReceive:) 方法查询当前 IAP 项目是否在用户地区销售,但如果开始时,用户登陆了 AppStore 账号,而且是销售的地区时,是可以查询到商品的信息,苹果不会回调 invalidProductIdentifiers
,所以当时用户购买时,苹果系统还会验证一次最终用户登陆的账号是否在销售地区里。
另外,苹果这次是调整价格机制,对于 StoreKit Original API 还是 StoreKit 2,字段和收据都没有变化!使用的字段都是以前就存在。另外,StoreKit 2 products(for:) 大家可以自行测试,原理类似通过 StoreKitError 和 Product.PurchaseError.productUnavailable 获取异常错误。
5.5 销售范围的生效时间
- 从非销售地区,添加到销售地区
- 从销售地区,移除为非销售地区
答:目前测试发现大概 30 分钟
左右生效。(线上和测试环境)
5.6 汇率差问题解决了吗
答:汇率差解决了,但开发者需要注意价格漏洞!
因为,现在开发者可以设置不同国家或地区的价格,如果你的 App 是全球销售,并且你设置的不同国家的价格点有很大的差异,比如 USD $9.99,而 CNY ¥6,那么必然用户或黑产,会大部使用中国大陆地区进行购买。
这里需要注意,黑产囤货,比如内购收据会大批量保留不消耗,然后销售给用户的问题。
所以,现在开发者设置不同国家或地区的价格点,需要考虑清楚销售的国家或地区,还有销售的价格。
5.7 获取真实的本地化货币
通过 StoreKit 查询到的商品本地化信息是否可靠?比如用户登陆的 App Store 账号登出,购买 IAP 时,系统会要求用户重新登陆账号,此时前后账号的国家地区不一样,就会导致查询到的货币不一样。
答:虽然苹果发布了新的价格机制,并且推出苹果全球均衡价格系统,本质就是计算各国的汇率换算,但是目前为止,苹果依然没有提供汇率换算的 API,当然也包含当前购买的本地化货币。所以,目前并没有 100% 可靠方案。
六、总结
2023 年 3 月 9 日发布,到 2023 年 5 月 9 日新的价格平衡生效,苹果提供了 2 个月的过渡期。所以建议开发者:
- 了解最新的 “苹果全球均衡价格” 矩阵表
- 为 App 或 IAP 设置 “基准国家或地区” (可选)
- 为需要特定国家或地区设置 “自定价格” (可选)
如果在这 2 个月内,开发者什么都不设置,那么过渡期间现在的所有国家和地区的价格不会变化。直到 5 月 9 日新的价格平衡生效,苹果会自动设置基准国家或地区为“美国”,并使用全球均衡价格调整各个国家和地区的价格点。
所以,在这段过渡期,开发者需要思考如何配置适合的价格点,从而提高你的 App 的销售和用户满意度,进一步推动业务增长。
从本文读者们可以看出来,App Store 定价机制涉及面非常广!本文只是从整体上让大家掌握原理,不可能面面具到详细介绍。所以,还有一些细节或疑问,欢迎大家在评论区一起交流~
App Store 问世以来,凭借领先的交易和支付机制,帮助开发者便捷地在全球范围内为其产品和服务进行定价与销售。从为用户提供顺畅结算和明晰收据到强大的营销工具、税务与防欺诈服务以及退款管理,App Store 的交易和支付机制为开发者提供了不断拓展的功能和工具,帮助他们发展业务。
如今新的价格机制,相信开发者现在可以应对自如啦!让我们提升用户的付费体验吧!
欢迎大家评论区一起讨论交流~
欢迎关注我们,了解更多 iOS 和 Apple 的动态~
参考引用
本文使用 ChatGPT 、New bing 和 NotionAI 参与创作! 如果内容有抄摘或复制,反馈则删除。感谢大家的阅读~
- 关于 App Store 苹果商店价格的那些事(历上最全版)- 掘金
- App Store 的定价机制升级现已扩展至所有购买类型 - Apple Developer
- 新价格点区间:https://www.apple.com.cn/newsroom/pdfs/App-Store-Pricing-Update.pdf
- 游戏出海本地化概述 - iOS技术运营团队 - 博客园
- Request access to higher App Store price points
- 为 App 内购买项目设置销售范围 - 管理 App 内购买项目 - App Store Connect
- App Store Connect API version 2.3 release notes | Apple Developer Documentation
- App Store Connect API OpenAPI 规范
- 订阅通知更新 - Apple Developer
- 自动续期订阅的价格涨幅门槛值 - 参考 - App Store Connect
- 管理自动续期订阅的定价 - 管理订阅 - App Store Connect
- productsRequest(_:didReceive:) | Apple Developer Documentation
- SKProductsResponse | Apple Developer Documentation
- invalidProductIdentifiers | Apple Developer Documentation
- paymentQueue(_:updatedTransactions:) | Apple Developer Documentation
- SKPaymentTransaction | Apple Developer Documentation
- SKPaymentTransactionState | Apple Developer Documentation
- SKPaymentTransactionState.failed | Apple Developer Documentation
- SKPaymentTransaction Error | Apple Developer Documentation
- products(for:) | Apple Developer Documentation
- StoreKitError | Apple Developer Documentation
- Product.PurchaseError.productUnavailable | Apple Developer Documentation