Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何写得好;限时功能“;在安卓上?_Java_Android_Time Limiting - Fatal编程技术网

Java 如何写得好;限时功能“;在安卓上?

Java 如何写得好;限时功能“;在安卓上?,java,android,time-limiting,Java,Android,Time Limiting,我希望用户在特定的有限时间内尝试某些功能,比如安装后2周(之后他们可以购买) 因此,我的天真想法是,比方说,使用SharedReference存储首次启动时间,然后用系统时间不断检查该日期 然而,用户可以简单地更改android手机的系统时间,并无限期地使用此“有限功能”。我的应用程序也应该能够脱机工作,所以上网时间检查似乎不是一个好主意 有什么好的框架可以用来进行这种编码吗?您必须使用远程服务器和数据库。系统时钟不是唯一的调整,用户可以简单地清除与应用程序相关的数据 你需要这个。在第一次使用应

我希望用户在特定的有限时间内尝试某些功能,比如安装后2周(之后他们可以购买)

因此,我的天真想法是,比方说,使用
SharedReference
存储首次启动时间,然后用
系统
时间不断检查该日期

然而,用户可以简单地更改android手机的系统时间,并无限期地使用此“有限功能”。我的应用程序也应该能够脱机工作,所以上网时间检查似乎不是一个好主意


有什么好的框架可以用来进行这种编码吗?

您必须使用远程服务器和数据库。系统时钟不是唯一的调整,用户可以简单地清除与应用程序相关的数据

你需要这个。在第一次使用应用程序时,您在远程数据库中注册此应用程序,并在其上加上时间戳。只要在触发此功能时检查服务器即可


您可以尝试将文件存储在应用程序的数据文件夹之外,这基本上意味着外部存储(如
/sdcard
)。从本质上讲,该目录是公共的,用户可以删除该文件。您必须应用一些加密,并为文件指定一个名称,该名称似乎不是应用程序的一部分,或者包含任何可能影响应用程序功能使用的信息,并希望用户不会以某种方式将其删除。

这可以通过跟踪两个值来实现(存储在
SharedReference
中)

在应用程序首次启动时存储您的
首次启动日期/时间
(即该值不存在)。
每次启动时还存储
当前日期/时间
(在您的设置中应称之为类似于
上次启动日期

启动时,首先检查设备的
当前日期
是否比存储的
上次启动日期
-如果是,则用户已更改日期/时间-或购买了时间旅行设备:),在这种情况下,您可以显示警告消息,告知用户行为,或者静默失败,阻止用户访问功能

如果日期没有问题,请继续将该值更新为新的
当前日期
(用于将来的发布),然后检查该时间段是否已过期,并根据需要提供该功能

这应该可以脱机工作,除了那些已经在设备上建立了根目录并且可以在
SharedReference
中修改值的用户,但他们应该是少数。要阻止root用户,您需要使用在线服务


还有一个警告,当用户旅行(跨越时区)时,这可能会导致误报。但是,您应该能够通过检查时区(如果需要)将其作为特殊情况处理。

根据固定日期检查如何?所以我不需要调用SharedReference。。。但是,互联网仍然需要检查一个时间远程数据库肯定是一个有效的解决方案。。。如果我能处理远程服务器。但是我没有一个。。。我不想为了避免隐私问题而存储用户信息…@Ivan你别无选择。如果用户愿意为该功能付费,那么他们不会介意提供自己的信息。当然,您必须存储用户id的散列值。是否将其写入设备上的文件?假设用户不知道如何从手机中删除文件。我认为该功能的主要漏洞是改变手机的系统时间…比第一次启动时访问文件要容易得多