2014-03-04 134 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