iOS苹果内购(详细步骤)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS苹果内购(详细步骤)相关的知识,希望对你有一定的参考价值。
参考技术A ios苹果内购(详细步骤)iOS 内付费(in-app purchase)--非消耗品的购买与恢复
恢复购买官方地址
苹果内购商品信息获取
Unity苹果(iOS)内购接入(Unity内置IAP)
# Unity3d发布IOS(包含u3d自带IAP内购)的流程-小白篇(三)-u3d配置ios内购部分
每次支付行为或每笔交易被认为是一个SKPaymentTransation,只有当SKPaymentTransation被finishTransaction:,这次支付(交易)行为才算是正常结束了。即使这次支付途中被中断,其实也并没有丢失。假设支付没有完成 App 就退出了(比如崩溃),那么当下次 App 重启之后,只要设置了监听addTransactionObserver:,之前被中断的支付就会接着进行。
第1步,这个过程中 App 进程因为某种原因被 kill 了,其实支付行为还在系统后台进行着,苹果自己做的,很有可能扣款成功。但是这时候没法为用户充值虚拟货币。
第2步,App 端与自己服务器端通信失败;自己服务器端与 AppStore 服务器之间的通信失败。
针对第一种情况,可以在 App 一启动就设置监听,如果有未完成的支付,则会回调- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions;这个方法,在这个方法里调用接口充值。
至于第二种情况,App 端需要做接口重试,设置一个重试的逻辑。
在发起支付请求之后,苹果返回商品列表,先请求服务器下单接口,成功之后,将订单信息保存在钥匙串,然后发起支付,在支付状态的回调当中, 成功了就去做服务器的验签操作,验证成功,关闭事物,并将订单信息删除,支付完成
app启动时监听掉单情况, 如果有掉单情况,回走事物更新的回调,然后再回调里,通过钥匙串拿出订单相关信息,然后获取支付凭证,重新向服务器发起验单的流程。
钥匙串保存订单信息作用:为了拿到订单的相关信息作为参数来请求服务器验签接口。
苹果内购流程详解
苹果内购主要分为两部分
itunnes 相关配置
一.在itunnes 上配置相关信息资料
首先需要配置一些前提条件,详细步骤如下
1.进入itunnes选择协议,税务银行业务
2.完善资料信息,主要有3项(联系人,银行信息,税务信息)
4.完善联系人信息,一般填申请开发者账号人员的信息,可以修改
5.完善银行信息 需要银行支付号(就是开户银行的一个标识),银行卡持有人名字
6.完善税务信息
7.以下默认选择no
8.确认界面,下图可能不太对,当时我是上下2个界面,第四项要上下一致才行
二.上面资料完善后换需要配置相关虚拟物品
1.选择应用
2.选择功能,我们添加一个app内购项目。
3.选择类型
a.可消费的产品 使用一次,之后就会耗尽,必须再次购买
b.非消耗品 一次购买的产品,不会到期,这种物品一般来说要使用恢复购买的功能
c.自动订阅类内购 这种物品会在一段时间内自动订阅
d.非自动订阅 如一次订阅一年的服务会员
4.提交一个屏幕快照(注意尺寸大小一般是用到内购的界面),然后保存。
三.接下来需要添加沙箱测试账号,此账号是在测试环境测试内购流程的
1.点击进入用户和职能界面
3.填写测试员信息(填写未被其他开发者使用的邮箱)
内购实现流程
一实现流程
主要有两种情况
本地处理
1. 程序通过bundle存储的plist文件得到产品标识符的列表。
2. 程序向App Store发送请求,得到产品的信息。
3. App Store返回产品信息。
4. 程序把返回的产品信息显示给用户(App的store界面)
5. 用户选择某个产品
6. 程序向App Store发送支付请求
7. App Store处理支付请求并返回交易完成信息。
2. 程序向App Store发送请求,得到产品的信息。
3. App Store返回产品信息。
4. 程序把返回的产品信息显示给用户(App的store界面)
5. 用户选择某个产品
6. 程序向App Store发送支付请求
7. App Store处理支付请求并返回交易完成信息。
8. App获取信息并提供内容给用户。
依靠服务器处理 (一般需要一个订单号对应相应的凭证信息)
1. 程序向服务器发送请求,获得一份产品列表。
2. 服务器返回包含产品标识符的列表。
3. 程序向App Store发送请求,得到产品的信息。
4. App Store返回产品信息。
5. 程序把返回的产品信息显示给用户(App的store界面)
6. 用户选择某个产品 生成订单号
7. 程序向App Store发送支付请求
8. App Store处理支付请求并返回交易完成信息。
9. 程序从信息中获得数据,(目前是订单号和凭证)并发送至服务器。
10. 服务器将数据发给App Store来验证该交易的有效性。(主要是凭证的验证)具体可以查看https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573
11. App Store对收到的数据进行解析,返回该数据和说明其是否有效的标识。
12. 服务器读取返回的数据,确定用户购买的内容。
2. 服务器返回包含产品标识符的列表。
3. 程序向App Store发送请求,得到产品的信息。
4. App Store返回产品信息。
5. 程序把返回的产品信息显示给用户(App的store界面)
6. 用户选择某个产品 生成订单号
7. 程序向App Store发送支付请求
8. App Store处理支付请求并返回交易完成信息。
9. 程序从信息中获得数据,(目前是订单号和凭证)并发送至服务器。
10. 服务器将数据发给App Store来验证该交易的有效性。(主要是凭证的验证)具体可以查看https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573
11. App Store对收到的数据进行解析,返回该数据和说明其是否有效的标识。
12. 服务器读取返回的数据,确定用户购买的内容。
13. 服务器确认成功后告诉客户端。
漏单问题
需要注意的是因为订单是和服务器保持同步的,但是购买流程在客户端,所有因为网络等问题会出现,漏单的问题,所以每次购买成功后需要本地保存一份凭证,只有当服务端验证通过后才从本地删掉,另外换需要在程序启动后在合适的时机检测是否有未处理的凭证,如果有需要给服务端验证。
官方demo
https://developer.apple.com/library/content/samplecode/sc1991/Introduction/Intro.html#//apple_ref/doc/uid/DTS40014726
参考 http://allluckly.cn/ios支付/iOS开发2015年最新内购教程
以上是关于iOS苹果内购(详细步骤)的主要内容,如果未能解决你的问题,请参考以下文章
uniapp实现iOS支付苹果内购支付踩过的坑以及具体操作步骤