iOS中的自动可续订应用内购买

时间:2014-09-10 22:56:05

标签: ios ios7 in-app-purchase

我目前无法为我的应用程序实施IAP。以下是有关其工作原理的基本信息

  • 我提供一年的自动续订服务订阅。用户将支付IAP,他们将有权访问该服务。
  • 用户应该可以购买多个订阅。用户可能(尽管不太可能)想要连接到两个不同的服务,因此他应该能够同时支付两个订阅

这是基本的想法,听起来很简单。因此,我已经非常成功地遵循了Apple的说明,直到paymentQueue:updatedTransactions状态调用SKPaymentTransactionStatePurchased为止。这里出现了几个问题。

  1. Apple's documentation表示您应该将transaction.transactionReceipt存储在NSUserDefaults中。所以我存储了这些数组(因为我想支持多个同时订阅)。问题是这在iOS7中已被弃用,因此我不知道该使用什么。
  2. 下一个问题是我不知道如何处理这些数据。一旦我的应用程序被杀死并重新启动,我所知道的就是NSUserDefaults中我的阵列的大小(例如,有两个收据,因此已经购买了两个订阅)。但是,如何读取收据编号中的数据以在我自己的服务器上进行一些验证?如何获取订阅有效的日期范围? (一旦订阅不再有效,我需要阻止访问,假设停止自动续订并且它到期)。我只有NSData对象,我不知道该怎么做。
  3. 感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你有办法去。保存transaction.transactionReceipt的目的是将来在某个时间点将其提交给Apple服务器。 Apple服务器通过发送该订阅的最新收据来回复收据。现在不推荐使用transaction.transactionReceipt,您可以从板载收据中获得收据:

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

并解码(使用OpenSSL和其他C ++的东西),或再次将其发送到Apple服务器进行解码和响应。

更简单的方法,也许App Review对“服务”更可接受的一种方法是使用非续订订阅。非续订订阅可能会重叠,因此应用程序可以轻松处理2个服务的问题。