IAP 笔记

来源:互联网 发布:哈尔滨旅游 知乎 编辑:程序博客网 时间:2024/06/10 00:39

https://developer.apple.com/documentation/storekit/in_app_purchase

前言

参考
参考2

iOS App提交指南-协议、税务和银行业务

官方文档

新建虚拟产品

  • Product ID用于从App Store获取价格信息,以及付费时标识是哪种产品被购买
  • 新建产品保存后除了类型和Product ID都可以修改
  • 新建完,不用等待苹果审核就可以在沙箱环境使用

新建测试帐号

登录iTunes Connect
点击Users and Roles (用户与职能)
点击Sandbox Testers(沙箱技术测试员可让您在向用户提供 Apple Pay 交易、App 内购买项目、Game Center 功能及本地化版本之前进行测试。)
添加Tester。添加后在测试机上用tester帐号登录app store(要使用新的邮箱)

附:在苹果托管不可消耗品(Non-consumable products)的内容需知

代码里该做的事情

SKProductsRequest

#import <StoreKit/SKRequest.h>

获取产品列表

首先读取出App中内嵌的或是服务端中的Product IDs。
使用SKProductRequest向苹果服务器验证哪些Product IDs是可用的。

注意不要在[Class load]里发送请求,一定要等到App didFinishLauching之后再发,不然无法接到请求返回。

向自己的服务器生成订单

如果需要经过自己的服务器做二次验证,建议在调用苹果支付接口前做这一步。
订单中必须要保存的是订单ID和用户想要购买的商品ID。这个记录是为了在二次验证时服务端做检查,防止 A 商品的 receipt 被用户拿来做 B 商品的购买结果校验。

发送购买请求

SKMutablePayment

观察购买状态

完成购买

在收到Purchased或Restored回调后,持久化购买记录以及receipt data
然后通知PaymentQueue,购买已经完成了。对finishTransaction则会触发系统IAP的UI刷新:

二次验证防止破解

经过 App Store 验证

  • 好在自己服务端做一次二次校验 这个过程最好通过自己的后台服务器来做

- 纯本地验证

服务端数据安全

线上环境仅在审核期间允许使用sandbox环境做二次验证,防止上线后内部同事使用sandbox test user免费充值道具到线上环境。需注意审核期间必须开启 sandbox 环境验证,不然会被 rejected。

其他安全问题

尽量使用纯 HTTPS 接口上传 receipt,并严格校验 SSL 证书,防止中间人攻击。

越狱后有木马会盗取用户的支付,如果必要,需要提醒用户越狱风险。

提交审核

如果是初次提交审核,IAP 商品要和第一个支持 IAP 的版本一起提交。审核期间要允许 sandbox 环境二次验证。
后续新增的 IAP 商品则没有此限制,可以随时提交审核。

原创粉丝点击