iOS開發(fā)-內(nèi)購丟單處理方式

之前寫了一篇關于內(nèi)購的博客iOS開發(fā)-2017蘋果內(nèi)購最新教程
,上線審核很順利,但是上線后很多問題暴露出來.用戶購買了虛擬產(chǎn)品扣費了,但是卻沒有充值成功.所以單獨寫一篇博客來總結怎么處理丟單情況的.

  • 為什么會丟單
    1.客戶端監(jiān)聽購買結果回調(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)聽購買結果的回調(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//交易結果, 在驗證成功之后移除隊列 [[SKPaymentQueue defaultQueue] finishTransaction: transaction];

3.在購買過程中加上蒙版,讓用戶不能進行其他操作

參考資料:

iOS Apple內(nèi)購及掉單問題
iOS內(nèi)購丟單處理及實現(xiàn)
ios 內(nèi)購服務器驗票(漏單處理)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容