iOS应用内购买(In App Purchase)总结
先附上幾篇文章:
1.In App Purchases: A Full Walkthrough
這篇文章里說(shuō)的都很詳盡了,代碼什么的基本可以照搬.
2.Store Kit Guide(In App Purchase)翻譯?
對(duì)蘋(píng)果文檔的翻譯,如果還不了解什么是IAP需要先看一看
3.蘋(píng)果官方文檔
當(dāng)需要注意細(xì)節(jié)問(wèn)題時(shí),要一個(gè)字一個(gè)字摳這個(gè)文檔
4.iPhone,In,App,Purchase購(gòu)買(mǎi)完成時(shí)驗(yàn)證transactionReceipt
這篇文章教你如何驗(yàn)證交易收據(jù)
?
?
??? 上面這幾篇文章基本上把IAP的整個(gè)流程都涵蓋了。這里我根據(jù)我的經(jīng)驗(yàn)(不見(jiàn)得是準(zhǔn)確的)進(jìn)行細(xì)節(jié)補(bǔ)充:
1、上傳商品信息(步驟可以參考itunes connect developer guide)。這里并不一定要先上傳好應(yīng)用(app),你可以等程序都測(cè)試完了在上傳。但是由于每個(gè)商品都是跟唯一一個(gè)應(yīng)用掛鉤的,所以要先創(chuàng)建一個(gè)應(yīng)用獲取其app id。也就是說(shuō)只要有一個(gè)app id,就可以添加其商品,并且進(jìn)行測(cè)試。
2、如果你的商品尚未審核通過(guò),經(jīng)過(guò)幾個(gè)小時(shí),你的商品就會(huì)進(jìn)入沙盒。這個(gè)時(shí)候我們就可以用測(cè)試賬號(hào)對(duì)其進(jìn)行購(gòu)買(mǎi)測(cè)試。沙盒模式進(jìn)行測(cè)試,蘋(píng)果是不會(huì)真正走信用卡扣款這一步的。
3、測(cè)試賬號(hào)可以通過(guò)itnunes connect來(lái)添加,賬號(hào)信息隨便添就行。這里要注意,這個(gè)賬號(hào)只能用于我們應(yīng)用的沙盒測(cè)試,不要用于正常商品的購(gòu)買(mǎi)(比如買(mǎi)個(gè)已上架的應(yīng)用里面的商品),否則蘋(píng)果會(huì)禁用這個(gè)賬號(hào)。
4、當(dāng)我們確認(rèn)購(gòu)買(mǎi)一個(gè)商品,我們會(huì)獲取一個(gè)SKPaymentTransaction對(duì)象,里面的transactionReceipt是驗(yàn)證信息(就是一組json字符串),我們對(duì)其進(jìn)行base64加密,然后按照蘋(píng)果規(guī)定的格式(具體可以參考文檔)發(fā)送到驗(yàn)證地址就可以了。驗(yàn)證成功后,app store返回的信息里面包含購(gòu)買(mǎi)商品的具體信息,可以用于對(duì)賬。
5、購(gòu)買(mǎi)商品后,我們本地的交易隊(duì)列中會(huì)有一個(gè)新的對(duì)象,這個(gè)交易隊(duì)列是保存在本地硬盤(pán)上的,除非我們調(diào)用finishTransaction,否則交易對(duì)象不會(huì)刪除。而程序開(kāi)啟時(shí)(這里要注意一下,下面會(huì)針對(duì)這個(gè)做詳細(xì)說(shuō)明)如果交易隊(duì)列不為空,則ios會(huì)通知我們交易隊(duì)列狀態(tài)更新,我們就要根據(jù)交易對(duì)象的狀態(tài)進(jìn)行處理。
SKPaymentTransactionStatePurchased? 交易成功,這時(shí)已經(jīng)扣完錢(qián),我們要保證將商品發(fā)送給用戶(hù)
SKPaymentTransactionStateFailed 交易失敗,原因很多(可以通過(guò)SKPaymentTransaction.error.code來(lái)查看具體失敗原因),最常見(jiàn)的是SKErrorPaymentCancelled(用戶(hù)取消交易),或是未輸入合法的itunes id
SKPaymentTransactionStateRestored? 非消耗性商品已經(jīng)購(gòu)買(mǎi)過(guò),這時(shí)我們要按交易成功來(lái)處理。
6、如果交易失敗,我們可以直接將交易從交易隊(duì)列中移除。如果成功,則要發(fā)起驗(yàn)證,等待驗(yàn)證結(jié)果來(lái)進(jìn)行處理。其結(jié)果無(wú)非三種,驗(yàn)證成功、驗(yàn)證非法、驗(yàn)證錯(cuò)誤。
成功和非法我們都要講交易對(duì)象從交易隊(duì)列中移除,驗(yàn)證錯(cuò)誤則可能是驗(yàn)證服務(wù)器出現(xiàn)故障,我們不應(yīng)該刪除該交易對(duì)象,待程序重新開(kāi)啟后,再一次進(jìn)行驗(yàn)證,直到成功或者失敗。
7、有的文章有提到這個(gè)觀點(diǎn),“我們應(yīng)該在程序開(kāi)啟的時(shí)候調(diào)用addTransactionObserver,來(lái)添加觀察者,否則可能會(huì)遺漏交易對(duì)象”
個(gè)人認(rèn)為,這種說(shuō)法不正確。IOS調(diào)用paymentQueue來(lái)通知我們交易狀態(tài)更新是在添加觀察者之后,如果沒(méi)有添加觀察者,IOS不會(huì)對(duì)交易隊(duì)列做任何處理。我們要確保我們的程序有能力處理所有交易了(比如說(shuō)登陸服務(wù)器成功)才添加觀察者,否則反而會(huì)出現(xiàn)IOS調(diào)用回調(diào)函數(shù)更新交易隊(duì)列狀態(tài),但是我們的程序卻沒(méi)有辦法處理這個(gè)交易。
總結(jié)
以上是生活随笔為你收集整理的iOS应用内购买(In App Purchase)总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 广和通新一代 5G 模组 FG370 已
- 下一篇: iOS库--.a与.framework