2011-02-18 170 views
5

根據蘋果的應用程序內購買編程指南:自動訂閱應用程序內購買:還原後續更新

的App Store中創建每次更新訂閱時單獨的事務。當您的應用程序恢復以前的購買時,Store Kit會將每項交易交付給您的應用程序。

讓我們想象我的應用程序訂閱是僅客戶端(無服務器組件)。驗證後續續訂是否已經結算的最簡單方法似乎是恢復以前的購買每月。

但是,這會在用戶每次撥打restoreCompletedTransactions時彈出用戶的iTunes密碼提示,這似乎是不好的用戶體驗。唯一的辦法是使用服務器收據驗證碼(以及新的「共享密碼」)?

回答

3

App Store調用paymentQueue並每次自動更新時發佈一個事務。該事務與transaction.transactionState == SKPaymentTransactionStateRestored一起發佈。

問題是,不幸的是這隻會發布到一個設備。第二個設備沒有獲得發佈。因此,要檢測自動更新,或者更確切地說,要檢測缺少自動更新並拒絕任何持續訂閱的設備,您必須執行restoreCompletedTransaction或「http發佈包含最後事務的64位編碼JSON」。如果來了,用戶需要給他們的密碼;正如你指出的那樣,這是侵入性的。如果是後者,則需要大量額外的編碼。所以,在回答你的問題時,我的問題是......爲什麼StoreKit沒有命令:

(不存在) - [[SKPaymentQueue defaultQueue] restoreAttachedTransactions:(NSArray *)transactions];

此命令將像restoreCompletedTransactions一樣流動,但它只會恢復附加的事務,最重要的是,它不需要用戶登錄。它具有與「http發佈包含最後事務的64位編碼JSON相同的安全保護」,它允許在StoreKit中完成整個In App Purchase過程,而不需要網絡發佈代碼。

如果這對你有意義,請建議如何讓這個給蘋果....謝謝。

+0

好主意。我希望蘋果允許它。 – 2011-04-10 04:12:07

0

如果你沒有服務器組件,您可以存儲的唯一場所此信息是在本地文件/數據庫/配置

的restoreCompletedTransactions選項是有當有出錯了本地數據庫,你應該在您的高級設置面板上的某處放置一個按鈕以恢復所有以前的事務。

因此,您將不得不信任您本地存儲的數據。通常情況下,這是安全的,因爲你不能改變你的本地文件系統(除非你越獄)。如果你不想相信這樣的用戶,你可以選擇加密它...

+0

感謝您的回答。然而,它並不是特定的訂閱。這通常是關於通過StoreKit購買的。 – 2011-03-21 20:34:42

相關問題