3

我已经在我的 iOS 应用程序中实现了可消耗的 InApp 购买。用户必须付费才能查看内容,并且内容将在 24 小时内过期。

一旦用户付款,我将向我的服务器发送一个current date& 。现在,当我为特定登录用户获取内容列表时expiration date,我的服务器将返回。purchase date例如,如果用户Patrick登录到应用程序,他将能够看到内容列表。在该 Web 服务中,我还将获取该用户的到期日期,并根据该时间显示到期时间。如果过期时间已过,它将在每个内容列表单元格中显示购买按钮。

我的应用程序最关心的是用户从设备更改他的当前日期。如果用户定期更改他/她的当前日期并且从不让他/她的设备有机会访问该内容,那么他​​/她expiration date将永远可以访问该内容。

克服这种情况的最佳解决方案是什么?这就是我被卡住的地方。

4

2 回答 2

4

如果您可以要求用户在线,那么我会忽略设备时间并使用您的服务器进行所有验证。

如果您支持对内容的离线访问,您将需要忍受用户不断调回时钟并且从不在线时使用您的应用程序的可能性。这似乎会削弱他们设备的一般功能,所以我个人不会过分担心它。

因此,无论哪种方式,如果可能的话,请推迟到您的服务器时间,否则就使用设备时钟。

编辑

更多线下案例详情:

  1. 您可以访问的唯一时钟是设备时钟。
  2. 当用户不在您的应用程序中时,他们可以控制他们的时钟。
  3. 用户无法仅针对您的应用选择性地离线,因此通过选择离线,他们无法使用其设备的任何在线功能。
  4. 同样,更改时钟也是一个系统范围的设置,会影响他们的提醒和告诉时间的能力。

出于所有这些原因,假设用户不会仅仅为了获取一个应用程序的内容而减少其设备的功能是有道理的,在我看来,这不值得你担心。如果根据时间限制内容至关重要,则应将连接作为一项要求。

于 2015-07-17T19:21:10.610 回答
3

只需记下应用程序上次启动的时间(以 GMT 保存),并且:

  • 如果用户下次使用您的应用程序的时间(格林威治标准时间)低于您保存的时间,请发出警告(不允许向后时间旅行的一些好处)
  • 在另一个向后的时间旅行中阻止应用程序,直到建立在线连接,您可以使用服务器检查所有内容
  • 允许向前的时间旅行(意味着用户实际上已经了解他做错了并将时间放回正确的值),但不重置警告计数

请记住将日历从语言环境转换为公历表示(或您使用/喜欢的任何其他表示)。

于 2015-07-23T10:37:19.447 回答