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

比如用户购买的月卡,通过邮箱和激活码请求网络激活 App,30 天后自动失效,怎么做,请大家讨论一个在 Android 端校验可行的方案,谢谢!

相关文章

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

  1. 我没理解错的话,你说的离线应该是指脱离服务端去实现校验过期相关的业务吧,如果是,个人觉得基本不可能,除非你运行 android 客户端的设备装了一个类似原子钟之类的东西,能在本地不需要同步服务端时间就知道现在时间是什么时候,另外脱离服务端在客户端校验本身也不安全。

  2. @OldCarMan 对的,发帖的原因也想跟大家讨论本地校验时间有效性的问题,客户端是可以通过更改本地时间来欺骗校验的,但工具类 App 一般就只有激活接口是联网的,所以无法跟服务器协同来校验时间!

  3. 一个方法,如果处理的数据本身有时间特征,可以用那些时间来判断。

    比如你有个 TODO 类的 App,程序跑起来时发现已存在的 TODO 条目创建时间晚于当前的系统时间,满足某个阈值可以判断为用户调早了系统时间,然后拒绝服务。

  4. 软件启动后,每隔一分钟更新一次当前时间。

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

    然后你的软件不要被破解修改就好了(破解估计也没必要防了)

  5. @codeforyou 可以搜索一下 “TLS 时间校验”,基本的原理就是,client 访问一个具有证书的 server (假设 HTTPS ),如果 client 时间和 server 时间的时间差超过一定的合法误差值的话,TLS 就会校验失败,通过这种方式可以一定程度上验证当前时间是否有被大范围篡改

  6. 不知道楼主到底是个什么样的应用。

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

    如果你的用户是普通人,那根本不用考虑那么多,直接用系统时间就可以了。因为你的目的不是防着所有人,而是确保有一定比例的用户付费。在自然状态下就会有这个比例的,搞得太复杂反而可能降低合法用户的体验,从而导致流失。

  7. 客户端做鉴权本身就是防君子不防小人的,就算用了加固混淆,如果破解的价值足够高也会有人慢慢逆向。建议还是把关键逻辑放在服务端。

  8. @lihongming 就是一个普通的工具类 App,借 V 站宝地抛出这个问题,希望大家一起讨论,看能不能碰撞出新的解决方案。

  9. @f165af34d4830eeb 很多事情都是防君子防不了小人的,有服务器协同自然更好,如果没有服务器,作为单机 App,也得想一个合适的方案,增加难度呀!

  10. 刚刚想到一个方案,不知道可行性怎么样。

    申请一对公钥和私钥,将激活码、激活码创建时间、激活码对应的时长(比如一个月)、以及其他的一些参数(设备识别号之类,总之要能区分设备),然后将这些参数组合起来使用私钥将这些加密。将加密后的密文当作激活码发送给用户。

    客户端使用公钥解密可以获取到上面所说的参数并进行激活,因为有激活码创建时间,所以用户需要经常调时间,甚至可以保存最近使用的时间进行验证,但是这种只针对一般用户。

发表评论

电子邮件地址不会被公开。 必填项已用*标注