2011-10-18 72 views
10

可能重複:
UIDevice uniqueIdentifier Deprecated - What To Do Now?UUID的應用程序上的iOS5

正如我希望你知道的,在uniqueIdentifier在在iOS5中已被棄用。我在尋找與iOS5基本相同的功能。

我從文檔中瞭解到,蘋果希望我們(開發人員)創建我們自己的UUID(使用CFUUIDCreate我猜),並將其存儲在NSUserDefaults中。但是,這讓我有些顫抖,完全沒有感覺到保存。在這種情況下,感覺有點沒有意義擁有UUID。

我需要一個UUID的原因是因爲我在auth過程中向我的服務器發送了一堆信息,包括UUID,並希望能夠跳過一些步驟,如果服務器可以「猜測」下次是誰的用戶該應用程序啓動或重新安裝或其他應用程序實現我的庫。 CFUUIDCreate似乎沒有幫助我。

我也快速瀏覽了gekitz,但據我瞭解,它僅基於手機中以太網「卡」的MAC地址。這是不合適的,因爲我有一種模糊的感覺,即MAC地址是可以改變的。在中的uniqueIdentifier

基於各種硬件細節的每個設備唯一的字母數字字符串。

當前我寫了這個代碼,它檢索一個UUID。但只要我在XCode中清理並重新安裝手機上的應用程序,我就會得到一個新的UUID。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *UUID = @""; 

if (![defaults valueForKey:@"UUID"]) 
{ 
    CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault); 
    CFStringRef UUIDSRef = CFUUIDCreateString(kCFAllocatorDefault, UUIDRef); 
    UUID = [NSString stringWithFormat:@"%@", UUIDSRef]; 

    [defaults setObject:UUID forKey:@"UUID"]; 
} 
else { 
    UUID = [defaults valueForKey:@"UUID"]; 
} 

[deviceInformation setObject:UUID forKey:@"UUID"]; 

概括起來講,我的問題是:
是否有創建基於這是「硬」的篡改,並給了我作爲接收器的小設備的UUID的一些可靠的方法需要依賴和信任的東西?這並不一定要根據設備,可能是基於應用程序作爲應用程序UUID,只要其重新安裝後相同。

+0

爲什麼來自'CFUUIDCreate'的UUID與'NSUserDefaults'一起存儲,不能滿足您的驗證用例?每次安裝將始終發送相同的值(直到它將被刪除並重新安裝)。開發時可能很煩人,但用戶不會經常刪除他的應用程序,是嗎? – DarkDust

+0

另外,爲什麼MAC會發生變化?它可以在PC上進行更改,您可以使用某種工具對其進行調整,但只要您不這樣做,MAC就不會改變。 – DarkDust

+1

@DarkDust這不是一個可能的重複。在我發佈自己的帖子之前,我已經閱讀過這篇文章。您已經在評論中回覆了您的第二條評論。下次安裝應用程序時,我需要相同的UUID,而不是該安裝的新UUID。我確實刪除了應用程序,我也是用戶。但是,這個SO問題並不是關於用戶的習慣,而不管它們是什麼。我的要求是一個唯一的UUID,但每個安裝都是一樣的。 –

回答

7

到目前爲止,MAC似乎是唯一已知的「穩定」識別設備的方式。

看看Erica Sadun's UIDevice(Hardware) category,你會注意到唯一有用的識別是MAC。

她還有一個UIDevice(IOKit_Extensions)類別,它提供了IMEI和序列號。但是,IOKit是私有API。 Erica wrote

正如iPhone傳教士Matt Drance在Twitter上發表的推文:「IOKit在iPhone上沒有公開,缺少頭文件和文檔很少是疏忽。

因此使用IOKit可能會使您遭到拒絕。據我所知,沒有辦法讓用戶在不越獄設備的情況下改變MAC(然後他可以做任何他想做的事)。所以我的建議是忽略jailbreakers並簡單地使用基於MAC的UUID。

警告! MAC地址API在iOS 7中將不起作用。

+0

正如我在聊天中提到的,私人庫很有點不,不。蘋果不會允許它。我將不得不使用Mac地址。 Thnx爲你提供幫助! –

相關問題