2

要求:
在我的应用程序中,我想允许用户从应用程序首次运行之日起一个月内免费使用所有功能。为此,我将首次运行日期存储在应用程序数据库中,并在每次应用程序启动时将首次运行日期与当前日期进行比较。

实现:
为了获取当前日期,我们有几个函数,比如Calendar.getInstance(); Date date=new Date();这些函数将返回标准“挂”时钟的日期\日期时间(时间和日期)。根据文件 Which can be set by the user or the phone network.

问题:
一切似乎都很好,但是如果用户更改日期Setting并将其设置为过去日期怎么办。例如,用户在 2013 年 6 月 7 日首次运行应用程序,因此在 2013 年 7 月 6 日之后应用程序必须显示他必须购买订阅,但如果用户将设备日期更改回 6 月 30 日等,则限制将不起作用。
那么为什么要正确实施它?
为什么要获取用户无法编辑的设备的实际时间?
编辑:
应用程序可以离线工作,因此用户可以关闭互联网连接。

4

4 回答 4

1

如何存储两个日期 - 应用程序首次使用的日期和最后一次使用的日期。30 减去两个日期之间的差将为您提供剩余天数,如果当前日期早于上次使用的日期,则您知道他们已将日期更改回来。

只是一个想法 - 没有尝试过,但理论上它应该可以工作。

于 2013-08-07T12:38:05.080 回答
1

存储使用的第一天和使用的最后一天,并监听 ACTION_TIME_CHANGED 意图。另外,尝试使用 AlarmManager。

或者,如果您有网络,请将其存储在电话外的数据库中。

但你可能需要问问自己,是否有人真的会为了使用你的应用程序而更改手机的日期。这会给他们带来很多麻烦:警报、日历、同步到其他服务等等。我认为这在现实中不是问题。

于 2013-08-07T12:46:46.177 回答
1

如果有可能,您可以使用一次性 GPS 请求来获取时间值。用户无法更改其接收到的 GPS 时间。如果您不需要它,添加权限会很痛苦,但这可以防止由于用户混淆日期/时间而导致的不良行为。

于 2013-08-07T12:49:32.827 回答
0
Event(APP_INSTALL) -> storeOnServer(INSTALL_TIME_KEY,getTimeFromServer());

Event(APP_LAUNCH) -> IF(getTimeFromServer -getStoredTime(INSTALL_TIME_KEY) >30)
  -> showTrialPeriodEndedAlert()
  -> quitApp();
于 2013-08-07T12:53:54.133 回答