2011-09-26 34 views

回答

3

请参阅this的问题,它有一个很好的答案。

我会给你我的审判经验。起初,我尝试在手机上使用日期,但后来意识到如果他们卸载并重新安装,可以绕过。这可以通过将安装日期存储在文件系统的某个位置(隐藏)来解决,但如果用户擦除数据或找到文件,会发生什么情况?

我也试过在任何地方的服务器(也许你的WWW网站?)只是检查日期/时间,但是这不会对您的应用程序的限制,因为他们必须有网络连接。很快,我意识到需要更好的许可证管理,因此使用了最后一个解决方案。

最后的解决办法是建立一个服务器。您可以使用设备的唯一ID(无论您选择哪个 - 我使用蓝牙MAC ID,因为我的应用程序也需要蓝牙),发布到服务器以检查用户是否有试用版,如果他们没有发出一个,如果他们这样做,我检查过期。现在我完全可以控制试验到期的时间。由于我的应用程序是在现场使用的商业应用程序,因此如果潜在买家需要一周的时间,这非常方便。

随着最后解决方案的唯一问题是,如果你打算发布到市场,就必须使用自己的支付系统。

祝你好运!

+0

以及如果我反转您的代码并使应用程序每个月都生成新的BT号码? – codeScriber

+2

然后我的应用程序仍然在做它应该做的事:阻止简单的解决方法。如果任何人都决心绕过审判,那么对此我无能为力。最后,任何系统都可能被“黑客入侵”,但是真的值得花时间节省几美元吗?另外我的应用程序是非常专业的,它的用户有钱:)。 – Jack

1

检查当前日期并计算到期日期。

1

这应该是很容易的,只是读了第一次启动的日期和储存,然后比较每个后续开机与存储的日期的日期,如果X天其更大,弹出一个消息框表示该应用已过期。

或者我错过了什么?

/托尼

+0

是不是正确的方法是什么?如果用户更改设备的日期? – Kamalone

2

只需添加更多的代码相关的还有:

  • 使用SharedPreferences存储上的日期先启动
  • 获取每次启动的日期 - 您可以用于检查Date.currentTimeMillis() - 并计算是否已经过了1个月
+0

+1这是更简单有效的方法之一。有效的意义在于它将对*多数用户产生预期的效果。 –

1

如果你担心设备上的数据(你应该!除非你对其进行加密),可以节省服务器上的数据和检索每个启动。

在另一方面,如果应用程序饼干担忧你,今天的Dalvik字节码使用dedexter或smali与apktools和的jarsigner实际上你可以找到其中的保护是改变一些跳跃,填补了其余代码的地方是容易逆转用nops保持对齐,并将其上传到一些他们分享它的饼干市场。所以它不会帮你太多。 如果你用proguard混淆你的代码,你可以让他们的生活变得艰难,但它会减慢他们的速度,不会阻止他们。

如果您的应用程序是基于Web的,即用户需要从您那里获取服务器数据,请为从服务器接收到的注册用户创建一个密钥(您可以根据他们的私人信息+ IMEI)和验证您的请求,如果您遇到错误\客户端没有密钥拒绝请求。 这不是100%的证明,因为请求可能是伪造的,有人可能抓取别人的IMEI并且密钥并且面对所有请求。

欢迎破复制保护软件世界:-)

相关问题