投稿文章,作者:SuperMario_Nil(簡書)
前言:
最近項目中接觸到內購,本文主要介紹如何開發應用內購(In App Purchase),有一些是根據實際需求做的考慮,有不同的見解歡迎留言指教。
本文demo:https://github.com/maligh/MLIAPManager,運行時不要忘記更改Bundleid 跟productId。如果對你有幫助請不要吝惜你的star~
前期需准備:
1、在蘋果後台添加商品,記下你的商品id。
2、在蘋果後台創建好沙盒測試賬號。
這兩步就不介紹了,可以自行搜索。
整個內購流程如下:
應用發送請求到服務器,獲取所有的可用Products Id集合(當然你也可以把Products Id硬編碼到程序中,這樣會導致不能動態配置商品)
根據服務器返回的Products Id 以及信息設置購買界面UI(這裡跟圖一有些不同)
用戶點擊購買商品
客戶端根據相應的Product Id向App Store請求產品信息,並發起購買payment(使用StoreKit)
App Store處理該payment,並返回完成的transaction
客戶端從transaction中獲取receipt憑證數據,並將其發送給服務器,等待返回
服務器驗證receipt憑證數據是否使用過,保存然後發給App Store驗證是否合法
服務器得到App Store驗證結果,返回給客戶端相應購買成功或失敗信息
客戶端提示用戶購買結果以及處理相應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
然後你會得到類似: