2014-09-10 51 views
0

我目前卡住爲我的應用實施IAP。這裏是關於它如何工作的基本信息iOS中的自動更新應用內購買

  • 我提供一年的服務自動續訂訂閱。用戶將支付IAP,他們將有權訪問該服務。
  • 用戶應該可以購買多個訂閱。有可能(雖然不太可能)用戶想要連接兩種不同的服務,所以他應該能夠同時支付兩個訂閱。

這是基本思想,聽起來很簡單。所以我遵循蘋果的說明取得了巨大的成功,直到paymentQueue:updatedTransactions被調用SKPaymentTransactionStatePurchased狀態。這裏出現了幾個問題。

  1. Apple's documentation表明您應該將transaction.transactionReceipt存儲在NSUserDefaults中。所以我正在存儲這些數組(因爲我想支持多個同時訂閱)。問題是這已經在iOS7中被棄用,所以我不知道該用什麼來代替。
  2. 接下來的問題是我不知道如何處理這些數據。一旦我的應用程序被殺死並重新啓動,我所知道的就是NSUserDefaults中數組的大小(例如,有兩個收據,因此已經購買了兩個訂閱)。但是,如何讀取收據號碼中的數據以在我自己的服務器上進行驗證?如何獲得訂閱有效的日期範圍? (一旦訂閱不再有效,假設停止自動更新併到期,我需要阻止訪問。我所有的都是NSData對象,我不知道該怎麼做。

謝謝你的幫忙!

回答

1

你有一段路要走。保存transaction.transactionReceipt的目的是在未來某個時候將其提交給Apple服務器。 Apple服務器通過發送該訂閱的最新收據來響應收據。現在transaction.transactionReceipt已被棄用,你從車載收據拿到收據:

NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL]; 
NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL]; 

,要麼是解碼(使用OpenSSL和其他C++的東西),或再次將其發送到蘋果服務器,解碼和響應。

一個更簡單的方法,也許應用程序審查一個'服務'可以接受的一種方法是使用非續訂訂閱。非續訂訂閱可以重疊,以便您可以輕鬆地處理2個服務的問題。

+0

謝謝你的迴應。我有幾個問題。這似乎只給你一張收據,而不管有多少交易。這張收據是否包含許多子收據或類似的東西? 2.我用什麼API將它發送給Apple解碼? – Rob 2014-09-11 16:42:11