Android 免申请使用一个月的保留期

Android 免申请使用一个月的保留期,android,date,Android,Date,要求: 在我的应用程序中,我希望允许用户从应用程序首次运行之日起一个月内免费使用所有功能。为此,我将首次运行日期存储在应用程序数据库中,并在每次应用程序启动时将首次运行日期与当前日期进行比较 实施: 为了获取当前日期,我们有几个函数,比如Calendar.getInstance()日期日期=新日期()这些函数将返回标准“wall”时钟的日期\日期时间(时间和日期)。根据用户或电话网络设置的。 问题: 每件事似乎都很好,但如果用户将日期从设置更改为过去的日期会怎么样。例如,用户在2013年6月7日

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

实施:
为了获取当前日期,我们有几个函数,比如
Calendar.getInstance()
日期日期=新日期()这些函数将返回标准“wall”时钟的日期\日期时间(时间和日期)。根据用户或电话网络设置的

问题:
每件事似乎都很好,但如果用户将日期从
设置更改为过去的日期会怎么样。例如,用户在2013年6月7日首次运行应用程序,因此在2013年7月6日之后,应用程序必须显示他必须购买订阅,但如果用户将设备日期更改回6月30日等,则限制将不起作用
那么,为什么要正确实施它呢
为什么要获取用户无法编辑的设备实际时间?
编辑:

应用程序可以脱机工作,因此用户可以关闭internet连接。

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


仅仅是一个想法-没有尝试过,但理论上它应该会起作用。

存储它使用的第一天和最后一天,并倾听行动时间改变的意图。另外,尝试使用AlarmManager

或者,如果你有网络,把它储存在一个数据库里,远离手机


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

如果有可能,您可以使用一次性GPS请求来获取时间值。用户无法更改接收到的GPS时间。如果您不需要权限,那么添加权限是一件痛苦的事情,但这可以防止用户篡改日期/时间而导致的不良行为。

@Keyser感谢您抽出时间。你能告诉我怎么做吗?有教程吗,林克?没有,对不起,我什么都没有。把应用程序被访问的日期和时间存储在共享的prefs中怎么样。然后,如果月试用期已到期,则获取当前设备的日期和时间,如果此日期和时间与共享Pref中的日期和时间相同,则执行类似于显示错误的操作,以表明他们必须购买该设备subscription@haraldK使用钥匙链将有助于存储data@haraldK啊,对不起,这个星期三有很多工作要做,但是api级别16没有服务器端,使用android这样的开放平台很难完成任务。如果用户在启动应用程序之前更改日期(如首次运行日期)是2013年6月9日,并且用户总是将日期设置为2013年6月11日,会怎么样?我想如果你告诉用户你是如何进行日期检查的,那么请确定,他们可能会找到一种解决方法:-)我喜欢这种获得“安全”时间价值的想法,尽管可能不太方便用户现在,如何在用户无法触及的同时存储值?
Event(APP_INSTALL) -> storeOnServer(INSTALL_TIME_KEY,getTimeFromServer());

Event(APP_LAUNCH) -> IF(getTimeFromServer -getStoredTime(INSTALL_TIME_KEY) >30)
  -> showTrialPeriodEndedAlert()
  -> quitApp();