智能手机设备的唯一设备标识符

时间:2012-03-03 07:50:09

标签: android ios windows-phone-7 blackberry uniqueidentifier

用例的业务背景是我们正在构建一个后端服务器(多功能),它将为多个平台(iOS,Android,Windows Phone 7,BlackBerry,j2me手机)提供应用程序。该企业希望通过首次安装合作应用程序来奖励用户。因此,企业希望跟踪单独的第一次应用安装用户重新安装(删除和安装)用户。因此,我们希望合作的移动应用程序在安装后通过Web服务将唯一标识符(使用我们在此决定的唯一标识符规范)发送到我们的后端服务器。服务器会验证它&如果它是第一次安装,则返还奖励。

因此,理想情况下,我们要在此处定义的是具有以下属性的唯一设备标识符规范。

  1. 在该设备类别(例如所有iOS设备)下,它应该是终身唯一的。因此,Factory Reset等工具不应更改设备标识符。
  2. 欺骗标识符应该不容易。例如。你可以在设备上使用软件工具吗?您重新安装应用程序,应用程序发回的标识符将被更改。
  3. 底层平台提供API以检索规范中提到的必要信息。也就是说,没有私有API等,因为应用程序将通过开放市场(App store等)部署。
  4. 由于该解决方案遍布全球,因此该规范应该是全球性的。因此,应该尊重所有国家的法律。
  5. 请注意,该解决方案希望定位所有平台设备;不仅仅是基于SIM的手机,甚至是基于非SIM的移动设备(ipod touch,ipad)。 [因此,非SIM移动设备上不存在唯一的IMEI号码,但可以在其上安装应用程序]
  6. 期待创新的大脑来讨论这个问题。

    感谢您阅读本文。

5 个答案:

答案 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。