不懂就问, Android 离线 App 限时激活方案?

2020-10-27 17:23:16 +08:00
 codeforyou
比如用户购买的月卡,通过邮箱和激活码请求网络激活 App,30 天后自动失效,怎么做,请大家讨论一个在 Android 端校验可行的方案,谢谢!
10031 次点击
所在节点    Android
22 条回复
OldCarMan
2020-10-27 17:46:13 +08:00
我没理解错的话,你说的离线应该是指脱离服务端去实现校验过期相关的业务吧,如果是,个人觉得基本不可能,除非你运行 android 客户端的设备装了一个类似原子钟之类的东西,能在本地不需要同步服务端时间就知道现在时间是什么时候,另外脱离服务端在客户端校验本身也不安全。
chs2018
2020-10-27 17:53:12 +08:00
可以试一下 workmanager 可能能满足
codeforyou
2020-10-27 17:59:57 +08:00
@OldCarMan 对的,发帖的原因也想跟大家讨论本地校验时间有效性的问题,客户端是可以通过更改本地时间来欺骗校验的,但工具类 App 一般就只有激活接口是联网的,所以无法跟服务器协同来校验时间!
codeforyou
2020-10-27 18:00:21 +08:00
@chs2018 好的,我去搜一下,谢谢你!
OldCarMan
2020-10-27 18:02:27 +08:00
@codeforyou 哈哈,所以把问题推回给产品经理:不合理,改需求!🐶
crayygy
2020-10-27 20:20:47 +08:00
客户端改时间可以欺骗代码,但是 TLS 依然会失败,可以利用证书机制来验证时间合法性
muzuiget
2020-10-27 20:28:09 +08:00
一个方法,如果处理的数据本身有时间特征,可以用那些时间来判断。

比如你有个 TODO 类的 App,程序跑起来时发现已存在的 TODO 条目创建时间晚于当前的系统时间,满足某个阈值可以判断为用户调早了系统时间,然后拒绝服务。
Gloomyer
2020-10-27 20:29:56 +08:00
有个系统启动时间 手动修改时间不影响这个时间
codeforyou
2020-10-27 20:45:01 +08:00
@crayygy 可以详细讲解一下嘛?
codeforyou
2020-10-27 20:45:57 +08:00
@muzuiget 嗯,这个也不失为一个折中的方案。
codeforyou
2020-10-27 20:48:18 +08:00
@Gloomyer 厉害,这个也可以拿来判断用户是否更改本地时间,赞!
imdong
2020-10-27 20:49:58 +08:00
软件启动后,每隔一分钟更新一次当前时间。

然后只要保证启动是系统时间不小于已记录时间。
每次修改时只取已记录时间与当前系统时间更晚的一个。

然后你的软件不要被破解修改就好了(破解估计也没必要防了)
codeforyou
2020-10-27 20:56:33 +08:00
@imdong 这也是一个办法,Android 现在除了混淆和加壳外,已经没有什么好的办法去防止破解了。
crayygy
2020-10-27 21:38:34 +08:00
@codeforyou 可以搜索一下 “TLS 时间校验”,基本的原理就是,client 访问一个具有证书的 server (假设 HTTPS ),如果 client 时间和 server 时间的时间差超过一定的合法误差值的话,TLS 就会校验失败,通过这种方式可以一定程度上验证当前时间是否有被大范围篡改
mostkia
2020-10-27 22:02:07 +08:00
如果有 GPS 权限,可以尝试通过 GPS 进行校时
lihongming
2020-10-28 01:03:21 +08:00
不知道楼主到底是个什么样的应用。

首先一点,如果你的用户是计算机专家,那你还是别指望通过技术手段来限制了,高手有的是,多考虑考虑法律手段或者其它吧。

如果你的用户是普通人,那根本不用考虑那么多,直接用系统时间就可以了。因为你的目的不是防着所有人,而是确保有一定比例的用户付费。在自然状态下就会有这个比例的,搞得太复杂反而可能降低合法用户的体验,从而导致流失。
f165af34d4830eeb
2020-10-28 01:07:52 +08:00
客户端做鉴权本身就是防君子不防小人的,就算用了加固混淆,如果破解的价值足够高也会有人慢慢逆向。建议还是把关键逻辑放在服务端。
codeforyou
2020-10-28 10:35:28 +08:00
@crayygy 这种方案仍需跟服务器协同哦!
codeforyou
2020-10-28 10:36:08 +08:00
@mostkia 方案先记下了,后续可以尝试一下。
codeforyou
2020-10-28 10:38:13 +08:00
@lihongming 就是一个普通的工具类 App,借 V 站宝地抛出这个问题,希望大家一起讨论,看能不能碰撞出新的解决方案。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/719121

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX