之前寫了一篇關于內(nèi)購的博客iOS開發(fā)-2017蘋果內(nèi)購最新教程
,上線審核很順利,但是上線后很多問題暴露出來.用戶購買了虛擬產(chǎn)品扣費了,但是卻沒有充值成功.所以單獨寫一篇博客來總結(jié)怎么處理丟單情況的.
-
為什么會丟單
1.客戶端監(jiān)聽購買結(jié)果回調(diào)后- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions
后在交易成功的情況下颖系,要拿到transactionReceipt憑證俊戳,APP在上傳憑證給服務器時發(fā)生了網(wǎng)絡或各種原因,造成了憑證的丟失,產(chǎn)生了掉單2.在ApplePay付款成功后由于網(wǎng)絡或各種原因沒有返 Transaction(SKPaymentTransaction),從而不能得到憑證去Apple服務器驗證訂單的正確性
3.用戶操作不當,在購買過程中主動退出....
- 如何解決丟單問題
1.APP在上傳憑證給服務器時發(fā)生了網(wǎng)絡或各種原因漫试,造成了憑證的丟失烘豹,產(chǎn)生了掉單
- 解決方案一:
當監(jiān)聽購買結(jié)果的回調(diào)后,保存交易憑據(jù),等服務器驗證成功之后刪除交易憑據(jù).每次進入內(nèi)購的控制器的時候,先去本地拿取交易憑據(jù),如果交易憑據(jù)存在,則再去服務器驗證.
存在問題:用戶丟單后重復購買又丟單,那么上次的交易憑據(jù)會被覆蓋
解決方案二:
在支付之前需要通過自己的服務器創(chuàng)建訂單凭豪,在交易成功回調(diào)之后汁蝶,立馬將該訂單和本次交易憑證存儲到數(shù)據(jù)庫中。在用戶下次登錄的時候窃躲,要首先驗證該數(shù)據(jù)庫中的交易憑證是否都經(jīng)過后臺驗證過并成功給用戶商品计贰。
2.不能得到憑證去Apple服務器驗證訂單的正確性
[SKPaymentQueue defaultQueue]這個隊列里面存著所有的已支付,未支付的訂單蒂窒,而且需要手動移除躁倒,而APP每次啟動的時候都會去判斷這個隊列里面是否為空,如果不為空的話會調(diào)用<SKPaymentTransactionObserver>代理的
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions//交易結(jié)果
, 在驗證成功之后移除隊列[[SKPaymentQueue defaultQueue] finishTransaction: transaction];
3.在購買過程中加上蒙版,讓用戶不能進行其他操作
參考資料:
iOS Apple內(nèi)購及掉單問題
iOS內(nèi)購丟單處理及實現(xiàn)
ios 內(nèi)購服務器驗票(漏單處理)