阻止用户操纵将存储在Android本地数据库中的时间?

时间:2017-02-25 10:00:25

标签: android sqlite android-studio

我正在努力建立一个员工出勤应用程序,用户(员工)来到办公室时可以打入。他们打入的详细信息将发送到服务器。主要关注时间。

我也在尝试实现离线功能。 (如果应用程序未检测到互联网连接,则打孔记录将存储在本地数据库(SQLite)上,一旦将其存储,请将记录从数据库(并清除它)推送到服务器上。

我尝试使用 GregorianCalendar 类捕获时间,但时间值似乎容易受到用户操作的影响。 (特别是情景A)

情景A

用户可以关闭互联网连接,转动自动数据&时间关闭,手动设置时间,然后打开应用程序以打卡。

示例: X先生于上午8点45分上班,打开飞机模式,手动设置设备时间(比如说早上8点30分)然后打入记录。他设置的时间值在db中输入,而不是他进入的实际时间。

如何防止这种情况发生?

情景B

用户可以手动编辑本地数据库值(rooted phones)。 [我知道这是不可避免的,但有任何建议让他更难?]

1 个答案:

答案 0 :(得分:1)

情景A: 解决方案1:仅在有互联网连接时接受值:

onAddComment() {
  if (this.text.replace(/\s/g, '').length == 0) {
    this.check = true;
  } else {
    this.check = false;
  }
}

解决方案2:ping服务器以获取timeDate。

解决方案3:为timechange事件注册广播接收器并禁用应用程序,直到您可以ping服务器(取自此处:https://stackoverflow.com/a/20766107/2540578

方案B:加密数据。有多种解决方案可以做到这一点,但这取决于你使用的是什么(sqlite,realm,greendao等)