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