我正在设计Android移动应用程序。 该应用程序使用信用系统。用户可以通过Google在应用结算服务中购买积分。 此外,当用户安装应用程序时,它会获得一些免费信用。
用户信用存储在Web服务器中。当用户下载应用程序时,创建UUID并将其存储在应用程序&服务器
我需要以某种方式检测用户何时卸载应用程序并重新安装它,以便接收起始免费信用(重新安装将创建一个新的UUID,因此它将像一个新用户)。
我一直在寻找手机或用户标识符,但我知道这不是一个好主意(http://android-developers.blogspot.com.es/2011/03/identifying-app-installations.html Is there a unique Android device ID?或How to find serial number of Android device?)。此外,为了使用非自有帐户,这很容易被黑客入侵。
以某种方式解决这个问题?也许使用in app billing? 我打开任何解决方案。
由于
答案 0 :(得分:2)
由于您完全正确(识别设备无用),我会使用Google用户帐户来识别人员:
http://developer.android.com/training/id-auth/identify.html
AccountManager accountManager = AccountManager.get(getApplicationContext());
Account[] accounts = accountManager.getAccountsByType("com.google");
for (Account a: accounts) {
if (a.name.contains("@gmail.com")) {
return a.name;
}
}
这可能很棘手,但可以让您从下载该应用的Googkle Play帐户中识别出reisntall。
答案 1 :(得分:0)
为什么不使用IMEI。它很容易获得。这很难改变,在许多国家,它是非法的(防止电话抢劫)。我们将它用于多种用途。 而且您只需要一个额外的权限READ_PHONE_STATE。 (大多数用户不抱怨)
在极少数设备中,它可能会返回NULL,在这种情况下,您应该准备好并测试另一个唯一标识符,例如序列号Mac地址。 Android ID或UUID。 正如你所说的那样,最后的标识符更容易被黑客攻击,但由于设备很少,你不太可能遇到黑客问题。
解决方案更多的是设计。例如在视频游戏中,如果您重新安装游戏以获得免费的虚拟现金,您还将删除您的保存,这样您就可以从零结束时获得相同数量的现金。由于玩家之间没有现金转移,因此不能被利用。
如果您要提供网络服务。您还可以在每个请求中检查IP。因此,请跟踪请求金额和总积分。这与IMEI一起。 最后,如果您相信真的很重要,您可以申请信用卡(免费),以防止同一用户的多个帐户。对于大多数服务而言,没有必要,因为您的用户较少,最终可能会变得更糟。