我开发了一种赌场应用,用户可以在上面赢取真钱。 为了避免欺诈,我们需要检查用户是否同时只使用一台设备。
当我查看有关如何识别设备的 Android 文档时:https://developer.android.com/training/articles/user-data-ids#best-practices-android-identifier:
使用 Firebase 安装 ID (FID) 或私有存储的 GUID 尽可能用于所有其他用例,付款欺诈除外 预防和电话。对于绝大多数非广告用例, 一个 FID 或 GUID 就足够了。
所以医生说:
那么欺诈的最佳做法是什么?
当用户打开应用程序并登录时,您应该向服务器发送一个包含用户 ID 的请求,为该用户分配一个会话 ID,并在用户保持在线期间将映射 {userId: sessionId} 存储在键值存储中.
现在每当用户打开您的应用程序并登录(或已经登录)时,检查该用户的 Id 是否已存在于键值存储中,如果存在,则不允许该会话,否则让该用户登录,当用户离开您的应用程序时,从键值存储中删除该映射。
只需向用户询问他的国家 ID,并将其添加为 dp 中的 uid
如果不想使用用户设备 ID,您可以使用用户 ID 为用户维护会话,一旦从设备登录,服务器将从设备(如果有)注销它。
为此,您基本上需要一个 API,它将在应用程序的 onResume() 中调用,它会检查应用程序是否仍有会话。如果会话过期,用户将被注销并重定向到登录页面。
您如何看待在用户注册流程中创建一些随机 deviceId,例如使用
UUID.randomUUID.toString()
?您将其存储然后在应用程序的私人存储中的设备上加密。
在注册期间,您将其发送到后端以将此 ID 与用户配对。
之后当应用程序调用API时,需要解密存储的deviceId并将其添加到请求头中以进行识别。
有了这个,你就有了一个不能轻易绕过的唯一ID,因为:
您可以在数据库中为所有用户创建像
uniqueDeviceID
这样的字段,当用户使用正确的凭据登录时检查uniqueDeviceID
是否存在。
如果它存在,这意味着用户已经在某个地方登录,您需要调用该
uniqueDeviceID
的注销操作,并为此登录分配新的 uniqueDeviceID
。
如果用户点击注销,您需要做的就是从数据库中的用户字段中删除
uniqueDeviceID
。所以下次他/她尝试登录时,ID 将不存在并且会保持循环。
检查手机的MAC地址。在全球范围内,它们是独一无二的,将它们链接到他们的帐户,如果它们连接到您自己的基础设施,您可以轻松跟踪它们。