用例的业务背景是我们正在构建一个后端服务器(多功能),它将为多个平台(iOS,Android,Windows Phone 7,BlackBerry,j2me手机)提供应用程序。该企业希望通过首次安装合作应用程序来奖励用户。因此,企业希望跟踪单独的第一次应用安装用户重新安装(删除和安装)用户。因此,我们希望合作的移动应用程序在安装后通过Web服务将唯一标识符(使用我们在此决定的唯一标识符规范)发送到我们的后端服务器。服务器会验证它&如果它是第一次安装,则返还奖励。
因此,理想情况下,我们要在此处定义的是具有以下属性的唯一设备标识符规范。
期待创新的大脑来讨论这个问题。
感谢您阅读本文。
答案 0 :(得分:3)
你正在打一场失败的战斗'相信'该设备为你提供一致的唯一ID,任何越狱的iOS设备都允许你改变UDID,我敢肯定Android的情况(也可能是Windows手机) ,MAC地址无用,因为它们可以在软件中更改。
即使像IMEI和IMSI这样的东西也可以伪造。 “最佳”解决方案是拥有一个登录服务器端,您(可信方)可以在用户帐户上设置属性。
相信对方给你一致或“非欺诈”的信息是灾难的一种方法,如果你像你说的那样“放弃奖励”,那将是一场代价高昂的灾难。
修改您的商业案例。
答案 1 :(得分:2)
对于Windows Phone 7 device unique id
可以通过DeviceExtendedProperties类访问:
object DeviceUniqueID;
byte[] DeviceIDbyte=null;
if (DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out DeviceUniqueID))
DeviceIDbyte = (byte[])DeviceUniqueID;
string DeviceID = Convert.ToBase64String(DeviceIDbyte);
MessageBox.Show(DeviceID);
msdn的说明:A unique hash for the device. This value will be constant across all applications and will not change if the phone is updated with a new version of the operating system.
答案 2 :(得分:2)
我建议使用IMSI。 IMSI是在大多数平台上以编程方式提供的唯一订户标识符,Windows Phone 7除外。它链接到SIM卡/ MSISDN,因此如果SIM / MSISDN发生更改,则会更改。使用IMSI,您将识别最终用户而不是他们正在使用的手机。
答案 3 :(得分:1)
Apple正在弃用UDID。所以现在有一个,但将来可能不会。
对于Android,具有SIM卡的设备通常具有唯一的ID,但并非始终可用(例如,无SIM设备),Google的指导是创建您自己的唯一ID。您可以将其发送到云存储,因此它始终存在。 http://developer.android.com/guide/topics/data/backup.html
Android的另一个替代方案是在您的应用中请求帐户访问权限,并访问用户的Google帐户名称,即他们的Gmail地址。您可以使用他们的Gmail电子邮件帐户(用于Android Market等)作为标识符的形式。这具有在所有设备上工作的好处,例如,如果有人有手机和两个Android平板电脑,他们可以被识别为一个人。
AccountManager accountManager = AccountManager.get(myApplication);
Account[] accounts = accountManager.getAccountsByType("com.google");
String gmailEmail = accounts[0].name.trim();
我认为最好为每个平台提问,因为答案几乎完全针对特定平台。
答案 4 :(得分:0)
识别设备有多种方法。对于移动电话,通常,国际移动设备身份或IMEI是首先考虑的事情。对于较新的手机,还有移动设备标识符或MEID。对于iOS设备,包括iPod等非移动电话设备,有唯一设备ID或UDID。