先看官方文档:
https://developer.apple.com/app-store/subscriptions/
https://developer.apple.com/cn/app-store/subscriptions/
升降级的特殊
- 在苹果订阅期内,更换商品做
升降级
操作(会调用- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
),如果苹果未扣款,则不会产生新的交易号
,那么苹果推送给App端交易id不变,只是票据中有个字段“订阅关系”字段.Pending_renewal_info
Pending_renewal_info
App端是区分不了当前操作是否是升降级的
, 所以如果你的App支持这种升降级操作,注意下这种情况(你的server端能 识别出升降级最好,这样App端也能识别出) - 复现场景条件: 线上真实苹果账号,沙盒账号无法复现。
订阅管理跳转URL
老的地址:https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions
新的地址:https://apps.apple.com/account/subscriptions(模拟器打不开)
#ifdef __IPHONE_10_0
#if __IPHONE_10_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
if ([[UIApplication sharedApplication] respondsToSelector:@selector(openURL:options:completionHandler:)])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://apps.apple.com/account/subscriptions"] options:[NSDictionary dictionary] completionHandler:^(BOOL success) {}];
}
#endif
#else
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://apps.apple.com/account/subscriptions"]];
#endif
沙盒账号
- 测试 App 内购买项目 官网
- 不能是别人已经注册过 AppleID 的邮箱, 可以不是真实的邮箱,但是必须符合邮箱格式
- App Store 地区的选择,测试的时候弹出的提示框以及结算的价格会按照沙箱账号选择的地区来,建议测试的时候新建几个不同地区的账号进行测试
- 注册沙盒测试账号时,提示报错
Unknown Errors while creating Sandbox Tester, Please check Error Log, email=a***st@qq.com
解决方案:把你的密码设置的复杂点,比如包含数字、字母混大小写等 - 用沙盒账号测试支付的包,只能是
adhoc签名证书
或者develop签名证书
打的包,不能是从AppStore或者TestFlight
上下载的,还没上线之前App
并没有地区之分,沙盒账号随便哪个地区都可以用来测试,弹出的购买提示框会根据当前沙盒账号AppleID的地区
显示语言的.
沙盒账号订阅
实际时限 | 续订间隔时限 |
---|---|
1周 | 3分钟 |
1个月 | 5分钟 |
2个月 | 10分钟 |
3个月 | 15分钟 |
6个月 | 30分钟 |
1年 | 1小时 |
- 1.测试订阅最多仅能自动续期5次,再加上首次购买,所以是6次购买。每天最多更新六次。所以如果想用同样沙盒复测的话,可以等24h后验证。
- 2.沙盒账号的续订,如果一直打开着 app,可能过了 5 分钟续订周期也不会收到通知,最好是杀死 app,5 分钟后重新启动,这样就会收到续订的通知了。
即1个月的自动续费,每5分钟续订一次,续订5次停止,然后你再验证票据就会得到21006错误。如果想在之后在测试,你需要其他的沙盒测试账号。- I.至于收据 - 你不会得到一个新的,但你应该得到另一个交易在同一张收据进行续约。交易将在交易队列中等待您,您应该使用SKPaymentTransactionObserver来监控SKPaymentQueue中的新交易。如果您验证配方,您还将看到具有更新到期日期的新交易。
- II.订阅成功更新后,Store Kit会将续订事务添加到事务队列中。您的应用在启动时检查事务队列,并以与其他任何事务相同的方式处理续订。请注意,如果您的应用在订阅续订时已在运行,则不会调用事务观察器;您的应用程序会在下次启动时查找续订。
- 3.和安卓相比,苹果测试起来没那么友好,尤其是没办法模拟用户手动取消订阅的场景,因为沙盒账号没有办法管理订阅。而安卓是可以测试这一场景的。
- 4.使用户
能够管理订阅
: 在非沙盒账号的情况下,项目中可以设置为打开此 URL 启动iTunes 或 iTunes Store 并显示“管理订阅”页面。- 沙盒账号由于无法登录itunes,故无法取消自动续费的签约。
- 5.
划重点
: 如果你是通过TestFlight
安装的,那么就不用使用沙盒账号进行购买了,需要使用真实的账号进行购买,当然也不会扣除你的钱的,只不过弹窗的说明变了.
TF包还分外测包,和提审包,提审包是可以购买的,产品有时会拿这个验新增IAP的购买功能。 - 6.自动续费在沙盒环境是不稳定的。有时续订5次,有时一次也没有。但是在生产环境没有这种问题。
StoreKit Test
2020年新出的一款适合开发者的功能:StoreKit Test
通过Xcode做各种模拟测试,比如缩短订阅周期为1s、5s
、 管理沙盒账号
、处理退款、续订等各种订阅处理