IAP内购那点事

Posted by AllenCao on June 20, 2018

IAP:In-App-Purchase

简称:内购,苹果独有的支付方式

对于虚拟产品类的购买要求都走苹果支付,实体产品可以走支付宝、微信等

开始内购,首先可以阅读官方文档:App Store Connect 帮助之内购相关

完成一个内购的步骤

  • 设置协议
  • 添加内购项目
  • 添加测试账号
  • 代码集成

设置协议

协议是第一步,而且必须通过的协议才能进行测试。

有时候发现添加了内购项目,但是测试时获取不到,这就是协议没走在第一步导致的。

协议的设置可以参考文末的链接,暂时就不具体去实现,后面有时间补上。


添加内购项目

App Store Connect -> 我的App -> 功能

image-20180620203027816

选择内购项目类型

image-20180620203027816

填写内购项目

审核信息图片大小最小为 640x960

image-20180620203027816

image-20180620203027816

注意:除了可选之外的信息都必须填写完整,否则创建完成之后会报元数据丢失的错误(正常显示的是准备提交)

image-20180620203027816


添加测试账号

App Store Connect -> 用户与职能 -> 沙箱技术测试员

image-20180620203027816

填写测试员信息

image-20180620203027816

注意

  • 安全提示问题 字符范围:[6, 35]
  • 姓氏和名字、邮箱可以随意填写
  • 地区按照自己测试地区选择
  • 密码中一定要存在一个大写字母,否则就会一直出现下面的问题

image-20180620203027816

如何使用:必须真机测试,退出真机上登陆的AppID,在测试内购过程中会弹框出让输入邮箱和密码,就填写上面添加的测试员,不可当做APPID去登陆,只能在购买的时候输入测试。


代码集成

1
2
3
4
5
6
内购流程:
1.app从app store 获取产品信息
2.用户选择需要购买的产品
3.app发送支付请求到app store
4.app store 处理支付请求,并返回transaction信息
5.本地或服务器进行验单

调用内购的代码复用性高,所以总结为一个单例使用 ACIAPManager

具体实现暂且也不细说,跳转自己基础库 ACIAPManager 进行查看

内购App Store验单返回的错误状态码与对应的描述

image-20180620203027816


目前还存在的问题

  • 没有考虑自动续期订阅、推介促销价
  • 检验票据其他方式:目前用的是App Store验证,没有使用服务器验证
  • 检验票据 对于订阅产品需要验证是否过期,没有去处理
  • 漏单处理
  • 测试次数较少,或许有些问题没碰到

参考