iOS SDK自动续订订阅与RMStore-如何验证活动订阅?

4

我正在使用RMStore库在我的iOS应用程序中处理自动续订订阅。它能很好地完成购买,但是我找不到任何文档说明如何使用RMStore检查当前的订阅是否仍然有效?

这里的检查已购买产品的代码没有起作用:

 if([persistence isPurchasedProductOfIdentifier:SUBSCRIPTION_1]) { ... }

这段代码总是显示已购买订阅(因为确实已经购买),但不检查该订阅是否已经过期。

我在RMAppReceipe.h文件中看到了“isActiveAutoRenewableSubscriptionForDate”方法,但我没有找到任何文档说明如何使用RMStore在我的应用程序中检索订阅配方以及如何使用“isActiveAutoRenewableSubscriptionForDate”方法检查此配方。请帮忙。

摘要:我只需要检查订阅“com.fanfun.apptestsubscription1”在今天(当前日期)是否仍然有效。请提供此简单检查的示例代码。

2个回答

7

我认为我找到了一个解决方案并且它有效:

RMAppReceipt* appReceipt = [RMAppReceipt bundleReceipt];

NSLog(@"Is subscription 1 active: %d", [appReceipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:SUBSCRIPTION_1 forDate:[NSDate date]]);

1
请注意,如果收据不可用,则bundleReceipt可能返回nil。如果是这样,您需要先刷新收据(通过RMStore中的refreshReceipt)。 - hpique
1
@hpique 最好的刷新方式是什么?在我的应用程序中,当用户进入某些屏幕时,我必须检查活动订阅。如果订阅处于活动状态,则用户会获得一些好处,例如广告拦截。我可以每次查找活动订阅时都检查空收据,如果检查失败,则要求用户在请求AppleID密码之前刷新它。但缺点是每个用户第一次访问此屏幕时都会出现此对话框。是否有关于收据刷新的最佳实践以最小化不愉快的警报? - Spail
@Spail,你找到最好的刷新方法了吗? - JERC

1
我不知道你使用的那个库。但是如果你可以访问收据本身,你可以对其进行base64解码,以获取"expires-date"字段中的收据持续时间。
另外,请查看以下链接:

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW2

并且

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ReceiptFields.html

更新

[RMAppReceipt containsActiveAutoRenewableSubscriptionOfProductIdentifier:identifier forDate:date]

这个应该能解决问题。


我如何访问应用内购买的收据? - Dmitry
RMStore已经有验证配方的方法(它使用OpenSSL解析配方),我想使用它。我无法编写自己的解析配方的方法,这对我来说太难了。 - Dmitry
1
实际上,查看RMStore库的源代码,可以发现有一个名为RMAppReceipt的类(https://github.com/robotmedia/RMStore/blob/master/RMStore/Optional/RMAppReceipt.h)。该类具有一个名为“subscriptionExpirationDate”的属性(第152行)。现在问题是如何获取RMApp Receipt... - Denis
@Denis 这个更新救了我的命!我花了几个小时来弄清楚这个问题...可惜它没有在库文档中。 - Idan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接