1

我正在设计一个 Android 移动应用程序。该应用程序使用信用系统。用户可以通过 Google in app 计费服务购买积分。此外,当用户安装应用程序时,它会获得一些免费积分。

用户积分存储在网络服务器中。当用户下载应用程序时,会创建一个 UUID 并将其存储在应用程序和服务器中。

我需要以某种方式检测用户何时卸载应用程序并重新安装它,以便接收起始免费积分(重新安装将创建一个新的 UUID,因此它就像一个新用户)。

我一直在寻找电话或用户标识符,但我读到这不是一个很好的主意(http://android-developers.blogspot.com.es/2011/03/identifying-app-installations。 html 是否有唯一的 Android 设备 ID?如何找到 Android 设备的序列号?)。此外,这很容易被黑客入侵,以便使用非拥有的帐户。

有办法解决这个问题吗?也许使用应用内计费?我愿意接受任何解决方案。

谢谢

4

2 回答 2

2

你是完全正确的(识别设备是无用的)我会使用谷歌用户帐户来实现人员识别:

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;
    }
}

这可能很棘手,但可以让您从下载该应用程序的同一个 Google Play 帐户中识别 reisntall。

于 2013-04-24T17:04:55.933 回答
0

为什么不使用IMEI。很容易得到。很难改变,而且在许多国家这是非法的(以防止电话抢劫)。我们将它用于许多目的。你只需要一个额外的权限 READ_PHONE_STATE。(大多数用户不抱怨)

在极少数设备中,它可能会返回 NULL,在这种情况下,您应该准备好并测试另一个唯一标识符,例如序列号、Mac 地址。Android ID 或 UUID。正如您所说,最后一个标识符更容易被黑客入侵,但由于设备很少,您不太可能遇到黑客问题。

解决方案更多的是关于设计。例如,在视频游戏中,如果您重新安装游戏以获得免费虚拟现金,您还将删除您的存档,因此您将从零开始最终获得相同数量的现金。由于玩家之间没有现金转移,因此无法利用。

如果您提供网络服务。您还可以在每个请求中检查 IP。因此,请跟踪请求的金额和总积分。这与IMEI一起。最后,如果您认为真的很重要,您可以申请一张信用卡(免费),以防止同一用户拥有多个帐户。对于大多数服务来说是不必要的,因为您将拥有更少的用户并且最终可能会变得更糟。

于 2013-04-24T18:14:11.780 回答