我正在创建一个应用,可以在有限的时间内为用户解锁功能。高级功能让我们打电话给他们。他们可以购买一个月,6个月或一年的订阅。这些订阅将不续订。经过大量搜索网络并找到非常不同的“解决方案”后,我转向StackOverflow以获得最佳效果。
购买订阅时,结束日期将存储在设备本地,直到通过iCloud同步,因为Apple希望您在所有设备上进行此订阅。该应用程序检查iCloud以查看当前订阅是否仍然可用,为剩下几天的用户显示一个很好的倒计时。但我现在遇到了一个问题。当用户已支付一个月,并将设备的日期更改为一年前(或其他)时,它可以使用该订阅一年。倒计时现在还没有显示23天,但是389。
我该如何避免这种情况? 我应该检查某个服务器以检查实时和日期吗? 如果用户仅在飞行模式下使用该应用程序该怎么办?
提前谢谢!答案 0 :(得分:0)
您可以检查标准的基于Web的时间服务器来执行此操作。由于我有自己的服务器(作为我的应用内购买机制的一部分),我只是在服务器上询问我的服务器当前时间。我每次启动应用程序时都会执行此操作,并且每次拨打服务器时都会执行此操作(通常在完成应用内购买时)。然后我在本地存储时间(在KeyChain或NSUserDefaults中,不记得哪个!),并使用它(以及设备时间,这是时间稍晚)来计算购买到期日。
当然,这假设用户在启动应用时具有网络连接。你只能这么做!
答案 1 :(得分:-1)
实际上,在成功完成InAppPurchase苹果后会发生什么事情将为您提供一个事务接收...此事务收据存储在本地。当您想要检查订阅处于活动状态还是已过期状态时,您需要使用此事务收据请求storekit,然后商店工具包将为您提供状态..如果状态为0,则它处于活动状态。如果状态为21006,那么您的交易已过期。如果你想继续在antoher设备中订阅,那么你需要在那里恢复交易..完成恢复后你将获得所有的产品ID和交易收据..你需要存储交易收据,你需要传递给storekit,无论它是处于活动状态还是过期状态。对不起我的英语很差..