In-App Purchase 內(nèi)支付相信是很多開發(fā)者的傷痛霍狰,由于內(nèi)支付的處理機(jī)制導(dǎo)致很多情況下會(huì)出現(xiàn)丟單的情況赠制,這邊文章就著重聊一下內(nèi)購丟單的情況和處理。如果你對(duì)內(nèi)支付還不是很了解建議你看下這邊文章相满,內(nèi)購流程:http://blog.csdn.net/teng_ontheway/article/details/47011813 慣例美女鎮(zhèn)樓哈 ??
1.下面是我自己畫的一個(gè)大概的流程圖(字比較爛,將就這看吧哈~)
圖中 ① 為請(qǐng)求商品詳情之后根據(jù)商品的ID 發(fā)起支付請(qǐng)求 (這里的Id 就是商品的ProductId)
在發(fā)起支付之后 丈探,會(huì)收到蘋果返回的商品信息(這些信息是你上架商品時(shí)候填寫的)录择,然后在根據(jù)這些信息把此次支付封裝成一次事務(wù)加到蘋果的支付事務(wù)里(個(gè)人理解)。如圖
這里面有一個(gè)重要是 操作是為了防止發(fā)生丟單碗降,串單的在下面在詳解
然后是圖中② 在收到蘋果返回的支付結(jié)果后做的處理
這里會(huì)收到蘋果支付的返回憑證隘竭,這里要做下本地存儲(chǔ),防止發(fā)送后臺(tái)失敗引起的丟單讼渊。
然后在成功驗(yàn)證發(fā)放商品之后在刪除本地存儲(chǔ)
2.丟單產(chǎn)生的情況和處理
1.在①的時(shí)候重點(diǎn)是在封裝的時(shí)候把訂單信息寫進(jìn)SKMutablePayment动看,這樣在收到支付結(jié)果的時(shí)候就可以去取出這個(gè)訂單號(hào),發(fā)送后臺(tái)進(jìn)行驗(yàn)證精偿,這樣就能有效的規(guī)避串單問題弧圆。
2.在②的時(shí)候在用戶支付之后還未收到憑證回調(diào)之后如果app 出現(xiàn)異常,就不能正常接收支付結(jié)果的回調(diào)笔咽,這個(gè)時(shí)候搔预,只要不主動(dòng)關(guān)閉這次交易事務(wù)下次設(shè)置監(jiān)聽的時(shí)候(建議重啟的時(shí)候),還是可以獲取到這次交易回調(diào)叶组,再進(jìn)行憑證處理拯田。
MyStoreObserver *tempObserver = [MyStoreObserver shareInstance];
self.observer = tempObserver;
[[SKPaymentQueue defaultQueue] addTransactionObserver:tempObserver];
3.在③的時(shí)候收到憑證的回調(diào)之后發(fā)送后臺(tái)驗(yàn)證這塊很可能會(huì)出現(xiàn)發(fā)送失敗等情況,這個(gè)時(shí)候就要把憑證進(jìn)行本地存儲(chǔ)(存儲(chǔ)的是記得是存儲(chǔ)為數(shù)組甩十,因?yàn)榭赡苡卸鄠€(gè))船庇,在驗(yàn)證成功之后再刪除本地存儲(chǔ)的憑證。
丟單的處理在上面的貼圖代碼中也有體現(xiàn)侣监,希望對(duì)你會(huì)有幫助鸭轮,大體總結(jié)就到這里了,中午吃飯了橄霉,就這么多吧窃爷! ??