2014-02-15 113 views
3

我需要获取唯一设备ID以填充数据库中的唯一用户标识。我已经使用下面的代码来获取它。如何以编程方式从ios7设备获取未更改的设备ID

NSString *strApplicationUUID= [[[UIDevice currentDevice] identifierForVendor] UUIDString];

但是当我重新安装应用程序,该UUID正在改变所有的时间。但据我所知,设备ID从不改变。对于我用下面的代码与第三方SSKeychain保存和检索旧的UDID:

NSString *Appname = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; 
    NSString *strApplicationUUID = [SSKeychain passwordForService:Appname account:@"manab"]; 
    if (strApplicationUUID == nil) 
    { 
     strApplicationUUID = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
     [SSKeychain setPassword:strApplicationUUID forService:Appname account:@"manab"]; 
    } 

现在的问题是,当该应用程序的版本,然后再次改变即应用2.0格式的应用程序1.0版UDID改变了。所以逻辑清楚地告诉我,我一直没有得到唯一的UDID,我只是把UDID当成供应商或应用程序的基础。

如何通过编程方式获取?有没有其他的方法可以获得,请让我看看正确的方向。

+0

您应该阅读该文章以获取有关UDID的一些信息http://blog.appsfire.com/udid-is-dead-openudid-is-deprecated-long-live-advertisingidentifier/ – MP23

+0

UDID不再可用于iOS 7(苹果一直告诉开发者它已经从iOS 5开始弃用)。如果用户从供应商卸载所有应用程序,然后重新安装它们,则'identifierForVendor'被重置。如果您需要唯一标识用户,则需要使用用户名和密码。 –

+0

嗨机器人猫,你能告诉我如果有人需要识别他的设备,那么他怎么能做到这一点,必须有一个有效的方式,因为... –

回答

6

我已经通过使用advertisingIdentifier解决了这个问题。

正如我所看到那里advertisingIdentifier是

“的字母数字字符串唯一的每个设备,...”

对于我已经用它作为唯一标识符(尽管它用于服务广告的 )。

我的代码是:

-(NSString*)UniqueAppId 
{ 
    NSString *Appname = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; 
    NSString *strApplicationUUID = [SSKeychain passwordForService:Appname account:@"manab"]; 
    if (strApplicationUUID == nil) 
    { 
     strApplicationUUID = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; 
     [SSKeychain setPassword:strApplicationUUID forService:Appname account:@"manab"]; 
    } 
    return strApplicationUUID; 
} 

,只是需要作为

[self UniqueAppId]; 
+2

嗨manab ... AdvertisingIdentifer是独一无二的,我同意..但如果您使用AdvertisingIdentifer,并且您没有显示任何iAD或iAD未正确加载Apple将拒绝您的应用程序 –

1

advertisingIdentifier时是因为它不改变应用更新或重新安装一个不错的选择调用它。

但是,当用户重置设备时,它也会发生变化,因此您可能需要根据自己的要求重新考虑它。

对于ref。

How to get the UDID in iOS 6 and iOS 7

CFUUID Vs. advertisingIdentifier Vs. identifierForVendor

在我来说,我更愿意使用用户的电子邮件地址作为一个唯一的ID。因此,只有当用户自己改变了他的唯一身份时,用户才会得到他的数据或者在系统上识别。:-)

问候

0

在Objective-C

如果u想要得到的唯一ID在IOS 7及以上的下面是使用:

首先创建自己唯一的ID和你有to save in the keychain. 现在use the vendor ID,它将被重置,如果同一供应商的所有应用程序都从设备中删除。

相关问题