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

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

前期需准备:* 1.在苹果后台添加商品,记下你的商品id. *2.在苹果后台创建好沙盒测试账号.这两步就不介绍了,可以简书搜一下,bing一下,soso一下,google一下。(我要改掉意识中百度一下这种说法,😄)


图一.png

整个内购流程如下:

  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:https://github.com/maligh/MLIAPManager ,注释写的挺详细的,有更好见解的请留言,觉得有帮助请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
然后你会得到类似:

receipt.png

结尾:好啦,不啰嗦了,快两点了😂,有不懂得或不同见解的请留言,互相交流互相学习欢迎star,最后感谢你的时间

推荐阅读更多精彩内容