我正在努力建立一个员工出勤应用程序,用户(员工)来到办公室时可以打入。他们打入的详细信息将发送到服务器。主要关注时间。
我也在尝试实现离线功能。 (如果应用程序未检测到互联网连接,则打孔记录将存储在本地数据库(SQLite)上,一旦将其存储,请将记录从数据库(并清除它)推送到服务器上。
我尝试使用 GregorianCalendar 类捕获时间,但时间值似乎容易受到用户操作的影响。 (特别是情景A)
情景A
用户可以关闭互联网连接,转动自动数据&时间关闭,手动设置时间,然后打开应用程序以打卡。
示例: X先生于上午8点45分上班,打开飞机模式,手动设置设备时间(比如说早上8点30分)然后打入记录。他设置的时间值在db中输入,而不是他进入的实际时间。
如何防止这种情况发生?
情景B
用户可以手动编辑本地数据库值(rooted phones)。 [我知道这是不可避免的,但有任何建议让他更难?]
答案 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等)