非续订订阅:时光倒流
Posted
技术标签:
【中文标题】非续订订阅:时光倒流【英文标题】:Non-Renewing Subscription: turn back time 【发布时间】:2014-10-30 15:40:43 【问题描述】:我正在创建一个可以在限定时间内向用户解锁功能的应用。高级功能让我们称之为。他们可以购买一个月、6 个月或一年的订阅。这些订阅将不会续订。在大量搜索网络并找到非常不同的“解决方案”之后,我转向 *** 寻找最好的解决方案。
购买订阅后,结束日期会存储在设备本地,直到通过 iCloud 同步,因为 Apple 希望您在所有设备上都拥有此订阅。该应用程序检查 iCloud 以查看当前订阅是否仍然可用,为剩余天数的用户显示一个不错的倒计时。但我目前遇到了一个问题。当用户支付了一个月的费用,并将设备的日期更改为一年前(或其他)时,它可以使用一年的订阅。现在倒计时不再显示还剩 23 天,而是 389 天。
我怎样才能避免这种情况? 我应该检查某个服务器以检查实时时间和日期吗? 如果用户只在飞行模式下使用应用怎么办?
提前谢谢!
【问题讨论】:
【参考方案1】:您可以检查标准的基于 Web 的时间服务器来执行此操作。由于我有自己的服务器(作为我的应用内购买机制的一部分),我只是在服务器上向我的服务器询问当前时间。每次应用程序启动时,我都会这样做,每次我进行服务器调用(通常是在应用程序内购买完成时)。然后我将时间存储在本地(在 KeyChain 或 NSUserDefaults 中,不记得哪个!),并使用它(以及设备时间,以较晚的时间为准)来计算购买到期时间。
当然,这假设用户在启动应用程序时具有网络连接。你只能做这么多!
【讨论】:
【参考方案2】:实际上,在您的 InAppPurchase 成功完成后,苹果会为您提供一个交易收据...此交易收据存储在本地。当您要检查订阅是否处于活动状态或已过期时,您需要使用此交易收据请求存储工具包,然后存储工具包将为您提供状态..如果状态为 0,则它处于活动状态。如果状态为 21006,则您的交易已过期。如果您想在另一个设备上继续订阅,那么您需要在那里恢复交易.. 恢复完成后,您将获得所有产品 ID 和交易收据.. 您需要将交易收据存储在那里,您需要将它传递给 storekit,无论它是处于活动状态还是过期状态.. 对不起我的英语不好..
【讨论】:
这是错误的。 Apple 对非续订订阅的续订时间/日期一无所知。为非续订订阅实施这种机制取决于应用。以上是关于非续订订阅:时光倒流的主要内容,如果未能解决你的问题,请参考以下文章