我的应用是免费的,并且通过应用内购买,我想启用其他功能。为此,我设想生成一个取决于当前用户和当前应用程序版本的解锁代码。我需要第一个,这样相同的密钥就不能用于其他人的安装(但可以用于同一用户拥有的多个设备)。我可能不需要第二个,但它会给未来更多的灵活性。
为此,我需要某种 google 用户 ID。有这样的事吗?如果是这样,我该如何得到它?
谢谢。
我的应用是免费的,并且通过应用内购买,我想启用其他功能。为此,我设想生成一个取决于当前用户和当前应用程序版本的解锁代码。我需要第一个,这样相同的密钥就不能用于其他人的安装(但可以用于同一用户拥有的多个设备)。我可能不需要第二个,但它会给未来更多的灵活性。
为此,我需要某种 google 用户 ID。有这样的事吗?如果是这样,我该如何得到它?
谢谢。
Google 会为您解决其中的一些问题。它将为用户提供一个设备相关密钥到每个设备。你的工作是
1)在您的服务器上正确验证密钥
2) 确保从服务器返回特定于设备的授权值,这样用户就不能只是复制数据文件。
3)在设备上,使用授权值来启用事物。
验证密钥很容易,但请确保您在服务器上进行。问题在于识别设备。谷歌和它的合作伙伴在这方面有点失落。Tim Bray 在http://android-developers.blogspot.ca/2011/03/identifying-app-installations.html有一篇博客文章讨论了这个问题。尽管他有所保留,我还是建议使用 ANDROID_ID。我对他的另一个提案的安全性表示怀疑,但尚未进行全面分析。绝对远离任何与网络相关的东西(IMSI、IMEI、ESN……)。我还缓存了使用的设备标识符并确保它不会改变。
就个人而言,我对解锁应用程序功能所需的数据进行了加扰。当我得到一个有效的交易时,我计算一个可以与设备 ID 结合来解锁数据的密钥。它远非完美,但似乎有效。我接受我会被黑——我只是不想让它变得明显。
如果您想要每个版本的密钥,那么您需要在版本更改时执行 RESTORE_TRANSACTIONS 并在服务器上重新验证。
我想建议另一种方法 - 没有更好,只是不同。使用标志来指示是否允许运行升级功能。定期使用应用内计费 API 验证用户是否购买了升级。如果没有,请重置标志。
用户可以破解该标志,但迟早会被重置,从而阻止使用这些功能。
要真正打破这种方法,用户必须对代码进行逆向工程并绕过检查标志。我怀疑大多数人会为此烦恼,但我知道什么?