2012-03-03 96 views
1

用例的业务环境是我们正在构建一个后端服务器(multi-tanent),该服务器将为来自多个平台(iOS,Android,Windows phone 7,BlackBerry,j2me电话)。该公司希望在第一次安装合作应用时对用户进行奖励。因此,企业希望跟踪第一次应用安装用户重新安装(删除&安装)用户。因此,我们希望合作的移动应用程序在安装&服务器后会将唯一标识符(使用我们在此决定的唯一标识符规范)发送到我们的后端服务器& &如果首次安装返回奖励。智能手机设备的唯一设备标识符

所以,理想情况下,我们只想在这里定义是唯一设备标识符规范用以下属性..

  1. 它应该是人生唯一久,设备类别(例如所有iOS设备)下。所以,Factory Reset等工具不应该改变设备标识符。
  2. 欺骗标识符不应该很容易。例如。你可以通过设备&上的软件工具重新安装应用程序,应用程序发回的标识符会发生变化。
  3. 底层平台提供API来检索规范中提到的必要信息。也就是说,没有私人API等,因为应用程序将通过开放市场(App Store等)进行部署。
  4. 由于解决方案是全球性的,因此该规范应该是全球真实的。因此,应该尊重所有国家的法律。
  5. 请注意,解决方案想要定位所有平台的设备;不仅仅是基于SIM卡的手机,甚至还有基于非SIM卡的移动设备(ipod touch,ipad)。 [所以,唯一的IMEI号码不在非SIM移动设备上,但可以在其上安装应用程序]

期待创新的大脑来讨论这一点。

感谢您阅读本文。从MSDN

object DeviceUniqueID; 
byte[] DeviceIDbyte=null;  
if (DeviceExtendedProperties.TryGetValue("DeviceUniqueId", out DeviceUniqueID)) 
DeviceIDbyte = (byte[])DeviceUniqueID; 
string DeviceID = Convert.ToBase64String(DeviceIDbyte); 
MessageBox.Show(DeviceID); 

描述:

回答

3

你正在为一个失败的战斗'相信'该设备给你一个一致的唯一ID,任何越狱的iOS设备可以让你改变UDID,我相信这是与Android的情况下(也可能是Windows手机),MAC地址是无用的,因为它们可以在软件中改变。

即使像IMEI和IMSI这样的东西也可能是伪造的。 '最好'的解决方案应该是拥有一个登录服务器端,您(可信任方)可以在用户帐户上设置属性。

相信对方会给你提供一致的或“非欺诈性”的信息是灾难的秘诀,如果你按照你的说法“放弃奖励”,这将是一场代价高昂的灾难。

修改您的商业案例。

+0

嗯,我知道IMEI可以伪造(设备标识符),但IMSI? IMSI应该至少与您的'最佳'解决方案一样安全,如果不是更安全的话。 – Yusufk 2012-04-04 07:03:21

+0

问题是,原始海报假定设备会给出正确的IMEI或IMSI,因为他无法在设备上物理验证IMEI/IMSI,而设备发送的IMEI/IMSI不能被信任为有效。因此,如果您希望并相信设备(或任何第三方)向您提供有效信息,那么绝对是错误地构建了您的产品。 – 2012-04-04 07:22:12

+0

IMEI是设备给你的东西,但IMSI会从SIM卡中查询。我知道编辑IMEI的方法,它会覆盖手机固件上存储的值,但IMSI是网络分配给SIM卡的内容,几乎不可能覆盖。 – Yusufk 2012-04-04 08:47:27

2

为Windows Phone 7 device unique id可以通过DeviceExtendedProperties类访问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.

1

苹果被弃用UDID。所以现在有一个,但将来可能不会有。

使用Android时,带有SIM卡的设备通常具有唯一的ID,但并不总是可用(例如无SIM卡的设备),Google的指导是创建您自己的唯一ID。您可以将它发送到云存储,以便它始终存在。 http://developer.android.com/guide/topics/data/backup.html

Android的另一种替代方法是在您的应用中请求帐户访问权限,并访问用户的Google帐户名称,即他们的Gmail地址。您可以使用他们的Gmail电子邮件帐户(用于Android电子市场等)作为标识符的一种形式。这有利于在所有设备上工作,例如,如果有人有手机和两个Android平板电脑,则可以将其标识为一个人。

AccountManager accountManager = AccountManager.get(myApplication); 
    Account[] accounts = accountManager.getAccountsByType("com.google"); 
    String gmailEmail = accounts[0].name.trim(); 

我认为这将是更好地问一个问题每个平台的答案几乎完全是特定于平台。

+0

我们希望规范基于设备硬件信息而不是用户帐户。单纯依靠用户帐户可能会造成欺诈。所以实际上我们将使用用户身份(电子邮件)和设备身份的组合。我们认为这可以帮助我们跟踪特定应用的所有设备和平台上的每个人的安装情况,从而最大限度地减少欺诈用户。虽然我们了解它不是100%的傻瓜证明。 – user653662 2012-03-03 08:26:25

+0

你会遇到的问题是,没有办法获得保证工作的设备ID。 http://android-developers.blogspot.com/2011/03/identifying-app-installations.html – 2012-03-03 08:55:20

0

有不同的方法来识别设备。对于手机来说,一般来说,国际移动设备身份或IMEI是首先要考虑的事情。对于新手机,还有移动设备标识符或MEID。对于iOS设备(包括iPod等非手机设备),存在唯一设备ID或UDID。

2

我建议在可用的地方使用IMSI。 IMSI是除Windows Phone 7之外的大多数平台上以编程方式提供的唯一订阅者标识符。它与SIM卡/ MSISDN链接,因此将在SIM/MSISDN发生更改时更改。使用IMSI,您将识别最终用户,而不是他们正在使用的手机。