2013-03-20 70 views
11

我使用服務器端收據驗證。當服務器收據驗證失敗時,我應該調用finishTransaction嗎?

當客戶的

- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions

被調用,transactionStateSKPaymentTransactionStatePurchased, 客戶發送收據到我們的服務器, 和我們的服務器進行驗證。

當服務器端收據驗證成功時, 客戶端顯然調用finishTransaction,沒問題。

當服務器端收據驗證失敗時, 因爲apple臨時返回非json,或者客戶端發送無效收據,或者其他東西, 服務器將該信息返回給客戶端。

接下來,我們的客戶應該做什麼? 我們應該叫finishTransaction

這導致無效的交易永遠在隊列中生活? 喜歡在這個問題上說:iPhone in-app purchase: receipt verification

但是,如果你發現收據是無效的,你要完成相關交易。如果沒有,您可能會在交易隊列中永遠存在額外的交易。這意味着,每個應用程序運行時,paymentQueue:updatedTransaction:將每筆交易調用一次...

但是,如果我們這樣做finishTransaction,我們寶貴的用戶是通過此收據收取(我們未能驗證)對?

或者驗證失敗的交易在某段時間內過期了嗎?

這是記錄在蘋果文檔的某處嗎? 我找不到任何http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/Introduction/Introduction.html

回答

0

是的,你必須完成交易。

如果你給用戶他們想要的東西,那就取決於你。在某些情況下,最好給用戶提供他們想要的東西,即使收據無效或假(使用越獄)。特別是當它花費你什麼都沒有。

+0

我經常看到這個評論,關於只要提供的內容無論如何,如果收據失敗。如果你打算這麼做,爲什麼要經歷驗證收據的麻煩?只是好奇你的意見。 – Scooter 2017-03-05 01:17:48

0

我完成了事務將其從隊列中清除,但如果驗證失敗則不提供額外的內容。如果是無效收據,那麼他們不會被Apple收費。如果事實證明,蘋果的驗證服務器暫時關閉,那麼他們將被收費,當他們試圖恢復購買(或再次添加)時,他們不會再次收取費用,並且您的應用將獲得驗證收據的另一個鏡頭。

如果由於技術原因(如Apple的服務器停機)而導致驗證失敗,將會非常尷尬,但是我沒有其他辦法可以阻止某人竊取您的內容。好消息是,如果Apple的服務器出現故障,您可以在彈出窗口中告知用戶,並且他們應該稍後重試,最重要的是,他們不會再次收費。

+0

使用易損耗產品時,您需要注意空的in_app陣列。如果in_app爲空,您可以使用SKReceiptRefreshRequest來獲取收據的另一個副本,以檢查購買是否在那裏,但如果它是消費品,則不會。來自Apple的消息:「消費品的信息會在收據付款時添加到收據中,並保留在收據中,直到您完成交易。完成交易後,下次收到更新時刪除該信息,從而導致一個空的in_app數組,如果你的應用程序只銷售消費品「 – Scooter 2017-03-05 01:13:48

相關問題