蘋果內購IAP防掉單處理

由於用戶網絡狀況、蘋果服務器穩定狀況、以及其餘不肯定因素,內購不可避免的老是出現掉單狀況,這是很是影響用戶體驗的,因此防掉單機制是很是有必要的。數據庫

內購的基本流程

1.客戶端下單,下單成功後獲取的訂單號服務器

2.獲取到訂單號後,開始內購markdown

  • 監聽購買流程
  • 根據productID獲取到具體product對象
  • 構建購買對象SKMutablePayment(SKMutablePayment區別與SKPayment能夠設置applicationUsername,經過該字段存儲訂單號,用來處理掉單時候關聯訂單業務)
  • 開始購買
  • 處理購買的回調結果,而後結束購買事務[[SKPaymentQueue defaultQueue] finishTransaction: transaction]

3.若是購買成功能夠拿到一個購買憑證網絡

4.將購買憑證發送給服務器,服務器跟蘋果服務器通訊以驗證憑證的有效性app

5.服務器將驗證結果返回給客戶端,客戶端根據驗證結果處理業務spa

以上爲內購基本流程代理

掉單的場景

1.用戶付款中或者付款後,客戶端由於某種緣由進程結束code

2.APP客戶端和本身服務器通訊失敗orm

3.本身的服務器和蘋果的服務器通訊失敗server

客戶端工做

客戶端須要在APP啓動時候,添加[[SKPaymentQueue defaultQueue] addTransactionObserver:manager]監聽操做,當還有未完成購買事務(未完成是購買事務並不會由於客戶端的卸載重裝丟失),將會啓動- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray<SKPaymentTransaction *> *)transactions代理方法,咱們遍歷處理transactions

服務器工做

服務器在和蘋果服務器通訊中,若是失敗應該設置重啓驗證的措施。同時服務器應該在驗證購買憑證以前,先經過訂單號,判斷該訂單是否已經生效,若是沒有生效再執行驗證操做,驗證經過後寫入數據庫使訂單生效,防止一個訂單被重複的驗證生效。

三方驗證

作好以上措施,能夠很大程度下降掉單的發生率,可是徹底避免仍是沒法作到,因此咱們有時候仍是須要經過運營幫忙,拿到用戶的購買憑證信息、蘋果開發者平臺中該APP的內購收入信息,以及咱們本身服務器的訂單信息,三方覈對。

若是有認識不全面或者錯誤的地方,歡迎你們評論指出

代碼後續會給出...

相關文章
相關標籤/搜索