由於用戶網絡狀況、蘋果服務器穩定狀況、以及其餘不肯定因素,內購不可避免的老是出現掉單狀況,這是很是影響用戶體驗的,因此防掉單機制是很是有必要的。數據庫
1.客戶端下單,下單成功後獲取的訂單號服務器
2.獲取到訂單號後,開始內購markdown
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的內購收入信息,以及咱們本身服務器的訂單信息,三方覈對。
若是有認識不全面或者錯誤的地方,歡迎你們評論指出