2014-03-04 55 views
3

我使用Mac地址来识别iOS设备的唯一标识,但是从iOS7系统始终返回02:00:00:00:00:00值。我已经搜查了所提问题的三个选项:iOS设备的唯一标识

  1. 厂商识别
  2. 广告标识
  3. 获取序列号使用IOUnit框架

由于IOUnitFramework没有被批准通过AppStore的,不能使用它在我的应用程序。供应商标识和广告标识返回非常长的价值。

是否有任何其他可能的方式来唯一标识ios设备?

预先感谢

存储在钥匙串的唯一标识符是另一种选择。但是我们无法直接从我们的ios设备访问钥匙串。那么是否有其他方法可以唯一识别设备?

+0

是 - 在这里查看我的回答:http://stackoverflow.com/questions/18770100/ios7-app-backward-compatible-with-ios5-regarding-unique-标识符 –

回答

3

不,苹果不允许您唯一识别设备。这与用户隐私有关。由于你是not identifying the user but a device

也不要使用ASIdentifierManager来识别设备,苹果现在拒绝使用它来识别设备的应用程序。 ASIdentifierManager仅用于广告目的。

剩下的唯一选择是[[UIDevice currentDevice] identifierForVendor]或将您自己的自定义创建ID保存到钥匙串。 保存到您自己的创建ID到钥匙串将确保如果用户删除应用程序以后重新安装,您仍然可以访问此值。

+0

如果您考虑销售旧手机时会发生什么,识别设备而不是用户是一个明显愚蠢的想法。现在完全不同的人拥有该设备。而且我的新手机没有被识别,因为它不同。 – gnasher729

+0

@ gnasher729当开发者使用'UDID'时,会发生很多事情。 Mac地址也一样。 – rckoenes

+0

我很好奇,因为在keychain中创建一个唯一的ID就相当于旧的“uniqueIdentifier”方法,苹果将它变成私有的---如果他们发现你正在重新制定该策略,他们是不会拒绝一个应用的用于唯一标识设备? – patrick

1

您可以使用它可以唯一地识别iPhone设备

此方法

- (NSString *)createUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    [[NSUserDefaults standardUserDefaults] setObject:(__bridge NSString *)string forKey:@"UUID"]; 
    [[NSUSerDefaults standardUserDefaults] synchronize]; 
    return (__bridge NSString *)string; 
} 

使用此在您需要的设备UDID创建UIID设备的UDID

- (NSString*)UUID 
{ 
    return [[NSUserDefaults standardUserDefaults] ObjectForKey:@"UUID"]; 
} 
+2

请注意,如果您以此方式执行此操作,该ID将与应用程序一起删除。 – rckoenes

+0

@rckoenes是的,在这种情况下,他应该根据您的暗示使用唯一标识符。如果应用程序从iOS设备中删除或重新安装。唯一标识符不会从钥匙串访问中移除 – morroko

1

你可以检查this linkthis link。它向您展示了多种识别iOS设备的方式。他们有点过时,但identifierForVendoradvertisingIdentifier仍然有效。

广告标识符主要用于广告目的,但Apple鼓励使用此标识符来满足任何需求。

advertisingIdentifier是新AdSupport.framework程式的一部分。 ASIdentifierManager单例公开方法advertisingIdentifier并调用它返回NSUUID类的一个实例。

NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; 

标识符厂商也返回的UUID字符串:

NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
+1

虽然此链接可能回答此问题,但最好在此处包含答案的重要部分并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 –

+0

你说得对,我会更关心,谢谢你的建议! – Jissay

1

有很多的途径来获得一个唯一的标识符。您可以像某些人推荐您一样获取identifierForVendor,或者在mokujin推荐您时创建UUID。即使有像SecureUDID,OpenUDID等外部源库,但所有这些都有同样的问题,如果你删除你的应用程序并重新安装,你会得到不同的标识符。

我一直在一家大公司工作,在那里他们使用MDM(移动铁),它给你的真正的UDID的可能性。我认为你没有在你的项目中使用MDM,所以我建议你使用推荐给我和其他用户的选择之一,并将它保存在你的钥匙串中。在此之后,你应该检查你的钥匙链是否有这个值,如果没有,你应该得到它并保存它。

不要将它保存在你的NSUserDefaults中,因为如果你删除你的应用程序,你的信息将被删除。

使用您的钥匙串,我建议你使用这个类从苹果KeychainItemWrapper

+0

在钥匙串中存储唯一标识符是一个不错的选择。 curently我会检查udid并添加一个对应的特定标识符 并将其添加到钥匙串。在添加到 之前,钥匙串将交叉检查标识符是否已存在或不存在,该标识符是否为 。 现在我的查询是,一旦我生成使用此源代码 的内部版本,并将其部署在另一台设备上,而无需使用mac book ..我 我的意思是安装应用程序从iTunes目前在Windows机器 应用程序将能够与钥匙串访问进行沟通 – Sonal0706

+0

您的应用程序有一个私钥钥匙串,并且在同一个teamID的应用程序之间共享钥匙串。这个钥匙串在您的设备中,不会与您的Macbook的钥匙串 –

+0

确定混淆。那么如果我将关于 的特定值存储在钥匙串访问中的设备标识符中,并且如果 应用程序安装在另一个ios设备 上,那么应用程序将能够检索先前存储的keychaindata? – Sonal0706

1

苹果杀死跟踪应用程序的方式,但我们可以为供应商使用以下ID

  1. 跟踪应用程序标识符
  2. NSUUID
  3. CFUUID

但这开发如果您在出厂时重置您的手机,冰ids将重置。

你会得到详细的描述在这里unique device identification in iOS