我已经开发了支持试用模式的应用程序。但现在我需要让一些用户通过激活码获得满足感。场景是用户下载试用应用程序,他可以输入应用程序的激活码,然后用户可以使用应用程序的全部功能。
有没有人能给我提个建议。
发布于 2012-12-29 23:08:22
你需要考虑如何认证代码--我猜你不想让他们通过商店认证代码,所以你必须提供一些后端服务来做这件事。
该服务显然需要向其发送激活码(您应该将其存储在远程设置中),并且您可能需要向其发送设备唯一ID -您可以使用unique id来实现此目的。
然后,你的服务应该验证它已经看到代码的次数,如果它满意的话,它应该hash代码,设备ID,以及与你的应用程序共享的秘密-这将需要嵌入到你的应用程序代码中。
为了用户的额外隐私,我建议在将设备唯一ID发送到服务器之前,使用共享密钥对其进行散列处理。
您需要将返回的激活码存储在您的应用程序中--而且没有太多选择--我个人会将此代码存储在LocalSettings区域。
现在,在启动时,您需要验证存储的激活码是否有效。如果你有一个互联网连接,那么你可以通过询问服务代码是否有效来做到这一点,但你必须安排离线检查。这很简单,因为激活码加上根据共享密钥散列的散列设备ID应该等于存储的激活码-根据您的应用程序类型,您可能希望在需要访问互联网之前只允许5次激活(选择一个较高的数字,因为这可能会真正惹恼用户)
最后,你需要考虑拥有多个设备的用户--根据商店的说法,你可以在不同的设备上为相同的用户安装5个相同的应用。为了适应这一点,我们将激活代码存储在远程设置中,因此在启动时检查代码是否存在,如果存在,则自动将代码和设备id发送到您的服务以进行激活。
您需要考虑的唯一另一件事是,您究竟如何保护应用程序中的共享密钥?不幸的是,这方面的选择并不多。这真的取决于你的应用程序需要多安全。如果你完全是偏执狂,那就混淆你的代码,但这只会赢得时间。如果你需要更多,那么我建议你发送设备代码,散列与密码随机随机数到你的服务,这将返回你发送的东西,但散列与秘密。不幸的是,这将使激活令牌的离线验证变得不可能,因此您将不得不在不需要互联网连接的情况下构建一个宽限期。
或者你可以在应用程序购买中使用。
https://stackoverflow.com/questions/14072769
复制相似问题