一、IOS 内购类型

1、消耗型商品: 只可使用一次的产品,使用之后即失效,必须再次购买。 示例:抽奖券。
2、非消耗型商品: 只需购买一次,不会过期或随着使用而减少的产品。 示例:游戏 App 的赛道。
3、自动续期订阅: 允许用户在固定时间段内购买动态内容的产品。除非用户选择取消,否则此类订阅会自动续期。 示例:每月订阅提供流媒体服务的 App。
4、非续期订阅: 允许用户购买有时限性服务的产品。此 App 内购买项目的内容可以是静态的。此类订阅不会自动续期。 示例:为期一年的已归档文章目录订阅。

二、IOS内购通用流程

1、用户向苹果服务器发起购买请求,收到购买完成的回调(购买完成后会把钱打给申请内购的银行卡内)
2、购买成功流程结束后, 向服务器发起验证凭证(app端自己也可以不依靠服务器自行验证)
3、自己的服务器工作分4步:

3.1接收ios端发过来的购买凭证。
3.2 判断凭证是否已经存在或验证过,然后存储该凭证。
3.3 将该凭证发送到苹果的服务器(区分沙盒环境还是正式环境)验证,并将验证结果返回给客户端。
3.4 修改用户相应的会员权限或发放虚拟物品

总结:简单来说就是将该购买凭证用Base64编码,然后POST给苹果的验证服务器,苹果将验证结果以JSON形式返回。

三、IOS和安卓自动续费区别

1、除华为外,安卓的自动续费是由后端控制发起每月的扣款(PS:华为的自动续费与iOS相同,由华为自己发起。)
2、iOS是订阅自动续费的商品后,每月由苹果发起扣费,再通知后端,从而进行一系列业务执行

四、IOS沙盒环境自动续费订阅有效期

实际订阅有效期 Sandbox测试有效期
1周 3分钟
1个月 5分钟
2个月 10分钟
3个月 15分钟
6个月 30分钟
1年 1小时

假设项目创建的商品是按月扣费的自动续费商品,则测试人员使用沙盒账号开通该自动续费商品后,每隔5min苹果会自动发起下次扣费,模拟下月的扣费情况,此时可以查看业务商品的到期时间是否延长等。

PS:
一般情况下是每隔5min则扣款一次,假设用户中途有取消订阅,且当前同一商品自动扣费未超过5次,再次使用该沙盒账号订阅后,存在大于5min后执行下次扣费的可能,请QA人员耐心等待下~假设10min后依然未扣款,存在苹果扣费成功但暂未给后端发通知的可能和后端收到通知并未处理业务的可能。

五、沙盒测试关注点

1、一个苹果沙盒账号只能享受一次免费试用期,所以每测试一次都要申请一个新的沙盒账号;
2、一个续费商品对应的一个沙盒账号,测试订阅最多仅能自动续期 6 次;
3、没办法模拟用户手动取消订阅的场景,因为沙盒账号没有办法管理订阅;
4、另外需要注意,沙盒账号的续订,如果一直打开着app,可能过了5分钟续订周期也不会收到通知,最好是杀死app,5分钟后重新启动,这样就会收到续订的通知了;

六、测试场景

  • 购买中断测试

你可以在运行 iOS 14 或更高版本的设备上测试购买中断的情况,只需在 App Store Connect 中为特定测试员的沙盒 Apple ID 启用购买中断即可。启用后,此沙盒 Apple ID 在沙盒环境中从设备上进行的购买尝试将被中断;除非你停用此功能或测试员在 iOS 设备上同意条款与条件,否则购买尝试将一直被中断。此功能可以测试 App 对中断情况的响应,进而确保顾客有顺畅的购买体验。
通常,当顾客需要解决有关 Apple ID 的问题时,购买中断的情况便会出现。示例场景包括:
条款与条件已更新,需要用户同意。
付款方式已过期,需要用户更新。
如果为沙盒测试员启用了购买中断,该沙盒 Apple ID 的所有购买都将被中断;只有解决中断问题后,交易才能完成。在沙盒环境下,测试员需要先同意条款与条件,才能完成购买。若要恢复该沙盒 Apple ID 的购买流程,你需要前往 App Store Connect 停用此功能,或让测试员在 iOS 设备上同意条款与条件。

  • 取消订阅
    在订阅周期内“苹果管理订阅”页面点击取消订阅。
  • 重启订阅测试
    区分订阅已过期、订阅已取消
    模拟手段:
    1、取消订阅后,在订阅周期内去“苹果管理订阅”页面重新订阅。(订阅已取消未过期)
    2、取消订阅后,在订阅周期外去“苹果管理订阅”页面重新订阅。(订阅已取消已过期)
    3、自动续期12次,订阅自动取消后,在订阅周期内去“苹果管理订阅”页面重新订阅。
  • 升级订阅
  • 降级订阅
  • 同级切换
  • 订阅成功自动续期
  • 其他异常情况
    a.用户下单已付款成功后,去核销过程中,用户行为中断
    步骤:
    1、站内首次购买成功,
    2、在点击核销前(支付成功苹果会返回一个弹窗),断开设备网络
    3、再去app点击核销弹窗
    4、恢复网络
    5、检查商品购买是否成功
    期望:
    客户端补单成功

b. 同一个苹果账号,同一个站内账号:自动续费时,服务端已核销苹果回调,验证客户端再次上传凭证时,服务端是否拦截;
c. 同一个苹果账号,同一个站内账号:自动续费时,服务端未收到苹果服务器的回调,此时客户端推送苹果的回调,验证服务端在收到客户端的自动续费凭证时,是否可以正确下发所销售的服务;
d. 超级异常的情况:服务端未收到苹果回调,客户端也未推送苹果回调,对销售服务的下发处理验证
e. 同一个苹果账号不同的站内账号,购买同一个商品(期望:不需要给用户提示购买成功之类的,实际上用户并没有再次购买商品)
f. 同一个苹果账号不同的站内账号,自动续费时,服务内容怎么发放?
h. 退款回调的处理

七、官方文档

IOS沙盒测试APP内购
创建沙盒测试Apple ID

八、风险点

1、IOS VIP订阅服务降级,首次不会扣费,只是切换套餐,第一次订阅并扣费的时间点是在上一个订阅套餐时间结束节点。例:连续包年切换连续包月服务,包年套餐有效期截止至4月30日,4月10日切换包月,这时候不会扣除包月费用,4月30日包年到期后会自动续费包月套餐,并扣除包月套餐费用
2、同一AppleID同一设备,A账号使用了首月优惠资格后,B账号再次购买,面板展示拥有首月优惠资格,但实际支付时扣除的是非优惠价格,付费面板会展示实际付费价格
3、一个AppleID同时只绑定一个撕歌ID,换号开通VIP服务,之前那个号的VIP权益取消,将剩余权益时长续接到新账号
4、VIP自动续费权益时长会受到苹果和撕歌通知服务的实际延迟影响,波动范围1-10min

IOS内购自动续费订阅测试相关推荐

  1. OC Apple IAP 自动续费订阅 重复订阅问题

    <SKPaymentQueue: 0x283eb1090> error = Error Domain=SKErrorDomain Code=0 "发生未知错误" Use ...

  2. iOS内购测试自动订阅型产品

    最近产品需要涉及到订阅型的内购创建,上一次使用自动订阅内购还是好几年的事情了,很多内容大都忘得差不多了,加上苹果设计的内购又增加了一些新功能和改变,不得不重新来审视下自动订阅型内购,而官方又没有中文文 ...

  3. 怎么关闭苹果手机自动扣费_爱奇艺怎么关闭自动续费

    关闭爱奇艺自动续费时您是否也遇到过这些问题: 开通后多久可以关闭? 在哪里关闭?支付宝还是微信里面? 苹果手机的关闭方法是不是不一样? 今天小V就为您带来史上最快捷的关闭爱奇艺自动续费教程,只需要1分 ...

  4. php++内购续期订阅,iOS内购:自动续期订阅总结

    前言:内购类型有四种:消耗型商品,非消耗型商品,非续期订阅,自动续期订阅. 顾名思义,从中最有难度的就是自动续期订阅的实现,开通自动续期订阅后,订阅会员的处理将会遇到如下问题:自动订阅的到期继续自动订 ...

  5. iOS内购(IAP)自动续订订阅

    一.介绍 iOS 的 App 内购类型有四种: 消耗型商品:只可使用一次的产品,使用之后即失效,必须再次购买. 示例:钓鱼 App 中的鱼食. 非消耗型商品:只需购买一次,不会过期或随着使用而减少的产 ...

  6. iOS内购:自动续期订阅总结

    前言:内购类型有四种:消耗型商品,非消耗型商品,非续期订阅,自动续期订阅. 顾名思义,从中最有难度的就是自动续期订阅的实现,开通自动续期订阅后,订阅会员的处理将会遇到如下问题:自动订阅的到期继续自动订 ...

  7. IOS 内购IAP 自动订阅收据验证文档服务端翻译

    将收据数据发送到App Store: 提交此JSON对象作为HTTP POST请求的有效负载. 中文文档:https://help.apple.com/app-store-connect/#/dev7 ...

  8. 如何在iPhone或iPad上检查和取消订阅自动续费

    现在大部分应用程序和服务会员都开通了订阅功能.一般情况下,自动续费会比购买月度.季度.年度会员要优惠很多,因此,很多用户在购买会员时选择订阅. 对于iPhone和iPad用户,经常是通过Apple I ...

  9. 怎么取消苹果订阅自动续费?教你一招,2分钟搞定!

    案例:苹果怎么取消自动续费? [想问下苹果订阅服务在哪里看?之前好像不小心订阅了什么自动续费,想要取消它.] 苹果订阅自动续费功能在一定程度上方便了用户的购买体验,但有时候我们会忘记取消订阅,导致不必 ...

最新文章

  1. Spanned.SPAN_EXCLUSIVE_EXCLUSIVE的含义
  2. java超市管理系统项目,HR的话扎心了
  3. [luogu4799 CEOI2015 Day2] 世界冰球锦标赛(折半搜索)
  4. Object_Type列表
  5. How to uninstall git
  6. 启动Tomcat 7一闪而过的问题
  7. Excel快速改变行列的次序
  8. 一代神机落幕!苹果把iPhone 6 Plus列为过时产品,网友吵翻了...
  9. 简单Android app开发_app开发流程:如何简单快速进行app手机开发?
  10. Idea设置背景色设置为护眼色
  11. 大麦无线路由器改装打印服务器,大麦domywifi DW33D路由器固件openwrt重分区版
  12. hysys动态模拟教程_泄压过程的HYSYS动态模拟.pdf
  13. 淘宝评论API接口,item_review-获得淘宝商品评论API接口接入说明
  14. PS 颜色表大全-CMYK颜色表(2)
  15. 微信小程序中实现地图导航
  16. OpenGL绘制框架(Win32版)
  17. 手把手带你打造自己的UI样式库(第三章)之常用样式组件的设计与开发
  18. Warmup预热学习率
  19. 形式化方法(Formal Methods)
  20. 难处理的js单引号与双引号问题解决

热门文章

  1. 如何拦截机器攻击(刷注册、刷票、刷优惠券、刷现金红包、数据爬取等等)
  2. html 瀑布流样式,HTML+CSS07 瀑布流布局
  3. 微信美食菜谱小程序系统设计与实现
  4. java计算一个多边形的重心_Java多边形重心计算
  5. 《Python编程:从入门到实践》第九章:类
  6. 从技术角度分析“抢票软件的加速”,真有多快?
  7. 今日python笔记---一个名片管理系统
  8. Fiddler 抓包指定文件格式 并保存在本地
  9. form表单序列化转换为json对象
  10. 记录一个坑:java.util.zip.ZipException: zip file is empty