我正在开发带有应用内订阅的应用(每月,每年)。当我从带有响应的苹果那里收到收据时(我正在用Apple服务器验证收据,我知道这不是个好主意,但仍然可以),我想检查订阅的到期日期。这是检查部分。

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

但是,如果设备时间错误(用户更改了设备时间),我如何确定订阅仍处于 Activity 状态?也许我应该从服务器请求当前时间?

最佳答案

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

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


更多细节...

您需要做的是读取收据URL作为数据,然后base 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是监视设备时钟的一种方式。

关于ios - 如何在ios中的应用程序订阅中正确检查可再生资源的到期时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48852252/

10-12 04:22
查看更多