2016-12-14 44 views
0

我有適用於iOS的Xamarin應用,並通過應用內購買。在測試期間,我購買了一種消耗品但未完成轉換(因錯誤而崩潰)。現在,如果我重新安裝應用程序,它允許購買此產品,但當然會恢復它,並顯示消息「產品已免費恢復」。iOS:先前購買的應用內商品在購買時恢復,但交易未更新

此行爲是預期的,但隊列偵聽器的UpdatedTransactions未被觸發。我可以直接通過StoreKit.SKPaymentQueue.DefaultQueue.Transactions檢查隊列,但我需要知道用戶交互何時完成(用戶在該消息對話框中按下確定)。但是沒有聽衆的方法被解僱。 正如我從Apple文檔瞭解到的,在此之後必須有事務更新。也許它在我嘗試購買之前被解僱。但是,我應該在購買前手動檢查隊列嗎?

回答

3

我不使用Xamarin,但StoreKit是iOS功能的基礎,因此它不能在Xamarin中正常工作。該事件必須早先被解僱。只要添加事務觀察者([[SKPaymentQueue defaultQueue] addTransactionObserver:self]),您將收到包含所有未決事務的更新回調。如果這是在應用程序啓動(應該是)時完成的,那麼當您到達購買屏幕時,您的交易將會更新。對我而言,這是IAP開發中最棘手的部分,因爲您必須在應用程序啓動時以及在您擁有它們的所有屏幕上處理它們,並且可以隨時進行回調。

請注意,此待處理事務可能會在事務處理列表中出現多次(我主要使用非易耗品,因此每次重新啓動應用程序時都會添加新事務,而不關閉所有待處理事務)。爲此,我有一個組件在應用程序啓動後立即添加爲事務觀察器,偵聽更新的事務並將它們存儲在實例變量中供以後使用。在開始新購買之前,我會檢查是否存在具有相同產品ID的未決交易,並據此採取相應措施。

希望這會有所幫助。

+0

謝謝,我懷疑類似的東西。順便說一下,你可以隨時檢查隊列,所以你不必在app開始的時候這樣做 - 至少在xamarin中SKPaymentQueue.DefaultQueue.Transactions總是可用的,所以不需要另外存儲它們。 – Tertium

+0

我編輯了答案。確保重新閱讀。對不起:) –

+0

我會重寫代碼,並稍後標記您的答案 – Tertium