我正在使用应用订阅(每月,每年)开发应用程序。当我通过回复收到苹果的收据时(我已经知道这不是一个好主意,但我仍然知道这是一个好主意,我想检查订阅的到期日期)。这是检查部分。
NSDate *currentDate = [NSDate date];
NSDate *expireDate = receipt[@"expires_date"];
NSComparisonResult result = [currentDate compare:expireDate];
BOOL subscribed = (result != NSOrderedDescending);
但是如果设备时间错误(用户更改了设备的时间),我怎么能确定订阅仍然有效?也许我应该从服务器请求当前时间?
答案 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是你的方式监控设备的时钟。