【附Demo】iOS快速上手应用内购(IAP)

cocopeng 2016-05-24 07:58:31 5252

1344515034198.jpg

投稿文章,作者:SuperMario_Nil(简书

前言:

最近项目中接触到内购,本文主要介绍如何开发应用内购(In App Purchase),有一些是根据实际需求做的考虑,有不同的见解欢迎留言指教。
本文demohttps://github.com/maligh/MLIAPManager,运行时不要忘记更改Bundleid 跟productId。如果对你有帮助请不要吝惜你的star~

前期需准备:

1、在苹果后台添加商品,记下你的商品id。

2、在苹果后台创建好沙盒测试账号。

这两步就不介绍了,可以自行搜索。

1457495-616f81cec455bacf.jpg

整个内购流程如下:

  1. 应用发送请求到服务器,获取所有的可用Products Id集合(当然你也可以把Products Id硬编码到程序中,这样会导致不能动态配置商品)

  2. 根据服务器返回的Products Id 以及信息设置购买界面UI(这里跟图一有些不同)

  3. 用户点击购买商品

  4. 客户端根据相应的Product Id向App Store请求产品信息,并发起购买payment(使用StoreKit)

  5. App Store处理该payment,并返回完成的transaction

  6. 客户端从transaction中获取receipt凭证数据,并将其发送给服务器,等待返回

  7. 服务器验证receipt凭证数据是否使用过,保存然后发给App Store验证是否合法

  8. 服务器得到App Store验证结果,返回给客户端相应购买成功或失败信息

  9. 客户端提示用户购买结果以及处理相应UI

以上流程需注意:

6~7步的时候,请求可能发送失败。客户端需考虑将receipt凭证数据本地持久化,并加入请求失败重发机制;除了重发,请求也可能遭到拦截篡改,合理的加密方法可以增加伪造破解的难度。

6~7步也可以改成客户端本地验证,不过不推荐除非是一些单机应用。

服务器验证的时候注意:

测试时应该使用地址:https://sandbox.iTunes.Apple.com/verifyReceipt

生产环境地址:https://buy.itunes.apple.com/verifyReceipt

这里要注意APP提交审核的时候测试人员使用的一般是沙盒环境。

客户端内购代码就不罗列了,请看DEMO,注释写的挺详细的,有更好见解的请留言,觉得有帮助请star。

下面我贴一下大概服务端代码:

demo文件中iap.py:

import httplib
import  json
receipt = raw_input("Enter Your transactionReceiptString:")
jsonStr = json.dumps({"receipt-data": receipt})
#connect = httplib.HTTPSConnection("buy.itunes.apple.com")
# sandbox
connect = httplib.HTTPSConnection("sandbox.itunes.apple.com")
headers = {"Content-type": "application/json"}
connect.request("POST", "/verifyReceipt", jsonStr)
result = connect.getresponse()
data = result.read()
connect.close()
decodedJson = json.loads(data)
print decodedJson#测试查看
# status = decodedJson[u'status']
# if status == 0:
    # 验证成功逻辑
# elif status == 21007:
    # 重新给沙盒环境发送一遍
# else:
    # 验证失败逻辑

使用方法:

替换iap.py 中的receipt值

然后进入命令行中执行 /usr/bin/python2.7 iap.py

然后你会得到类似:

1457495-93b15077b68ab246.jpg