如何在ios中正确检查应用订阅中可更新的到期时间

时间:2018-02-18 13:33:41

标签: ios objective-c in-app-purchase subscription

我正在使用应用订阅(每月,每年)开发应用程序。当我通过回复收到苹果的收据时(我已经知道这不是一个好主意,但我仍然知道这是一个好主意,我想检查订阅的到期日期)。这是检查部分。

NSDate *currentDate = [NSDate date];
NSDate *expireDate = receipt[@"expires_date"];
NSComparisonResult result = [currentDate compare:expireDate];
BOOL subscribed = (result != NSOrderedDescending);

但是如果设备时间错误(用户更改了设备的时间),我怎么能确定订阅仍然有效?也许我应该从服务器请求当前时间?

1 个答案:

答案 0 :(得分:0)

我建议您阅读更多关于Apple's receipt verification以及如何最有效地验证应用内购买的信息。

  

对于您的问题:简而言之,是。从服务器请求当前时间将为您提供来自用户设备的独立的当前时间。这将始终是检索当前时间的最可靠方式。

更详细一点......

您需要做的是将收据URL作为数据读取,然后根据数据对其进行64位编码。这个问题有一个类似的帖子,有助于理解这个过程。

最终,您需要尽可能安全地处理这些敏感数据 - 此过程将允许您检索保存最好的"安全" IAP的到期日期(收据)。

Read this post to help point you in the right direction.

关于检查"正确的时间" ,您可以采取一些方法。

方法1 从API获取正确的时间。你可以用Here is an API来获取世界时间。 You could also use AWS获取当前时间。

方法2 This response用于监视设备时钟更改的简单方法,以确保/监听用户更改时间。通过监控任何时间变化,您可以决定用户是否恶意更改了时钟。

方法1将(当然)提供一个独立的时间供您比较应始终是真实的当前时间,其中2是的方式监控设备的时钟。