2014-09-19 121 views
7

對於內部應用程序,我們使用以下代碼UIDevice+serialNumber來獲取設備序列號。 但是,似乎在iOS 8中,註冊表項「IOPlatformSerialNumber」爲空。 可以通過其他方式獲取序列號嗎?獲取iOS 8設備的序列號

+0

你的意思是,你想要設備ID/UDID。?對。? – 2014-09-19 04:33:31

+0

您可以創建一個唯一的隨機ID來標識設備,除非您重置設備,否則它不會更改。如果你想實現這個我可以提供代碼。 – souvickcse 2014-09-19 06:33:10

+4

我想要實際的序列號。這不適用於應用商店應用,它適用於內部應用。我們需要串行代碼而不是UUID,因爲這是通過移動設備管理與用於管理應用程序的序列代碼鏈接的。 – quentinadam 2014-09-19 08:21:29

回答

-10

Apple設備的序列號可在設置 - >常規 - >關於 - >序列號下找到。

+1

問題在於如何以編程方式獲取此內容,而不是通過設置。 – 2014-09-19 05:53:29

0

答:不可以

目前有浮動的解決方案圍繞濫用.mobileconfig,但他們補充由於其他問題的性質。

UUID被刪除的原因。請參閱2011年美國國會的有關隱私和蘋果召喚的新聞,以瞭解爲什麼必須改變這一點。 http://arstechnica.com/apple/2011/04/apple-google-asked-to-join-judiciary-hearing-on-mobile-device-privacy/

濫用底層行軍端口獲取設備序列號作爲UUID的替代不是解決方案。現在濫用移動配置,並猜測將工作多久。

您有很多體面的方式來處理您以前使用設備標識的任何情況。特別是在擁有加密技術和MDM的企業環境中,絕對沒有必要跟蹤這樣的設備。

+0

這是一個資訊性評論,但不是答案。 – zaph 2015-10-02 12:47:56

+0

明白了。讓我用一個具體的答案來更新它。 – 2015-10-02 13:21:09

+0

@HelgeBecker我想知道,如果我的應用使用.mobileconfig解決方案,它會被應用商店接受嗎?您是否嘗試使用.mobileconfig發佈應用程序以獲取UDID? – Moucheg 2015-12-02 10:58:36

0

正如Helger所述,由於安全/隱私的原因,UDID在iOS 6+中不再可用。相反,使用identifierForVendoradvertisingIdentifier 請檢查UDID Replacement APIs

對於iOS 8+

+ (NSString *)deviceUUID 
{ 
if([[NSUserDefaults standardUserDefaults] objectForKey:[[NSBundle mainBundle] bundleIdentifier]]) 
    return [[NSUserDefaults standardUserDefaults] objectForKey:[[NSBundle mainBundle] bundleIdentifier]]; 

@autoreleasepool { 

    CFUUIDRef uuidReference = CFUUIDCreate(nil); 
    CFStringRef stringReference = CFUUIDCreateString(nil, uuidReference); 
    NSString *uuidString = (__bridge NSString *)(stringReference); 
    [[NSUserDefaults standardUserDefaults] setObject:uuidString forKey:[[NSBundle mainBundle] bundleIdentifier]]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    CFRelease(uuidReference); 
    CFRelease(stringReference); 
    return uuidString; 
} 
} 

您可以使用identifierForVendor後存儲他們鑰匙圈和以後使用。因爲重新安裝應用程序時鑰匙串的值不會更改。

我曾經爲此使用Open UDID。不知道它是否仍然有效。

+0

我知道UUID,謝謝。但是,我的問題是關於如何獲取序列號(不是UDID或UUID)。我會很好的使用私有API的解決方案,因爲這個應用程序是通過企業許可證分發的。 – quentinadam 2015-10-02 11:06:08

+0

從iOS 8開始,IOPlatformSerialNumber屬性被刪除,現在檢索其值的調用返回nil。對不起,如果我誤解了。 – iAhmed 2015-10-02 12:01:49

+0

在ObjC中獲取uuid最簡單的方法是:'[[NSUUID UUID] UUIDString]'。也沒有使用'@ autoreleasepool'和'synchronize'的目的。分解變量'[NSUserDefaults standardUserDefaults]'和[[NSBundle mainBundle] bundleIdentifier]'可以簡化代碼並減少拼寫錯誤的可能性。對於代碼安全性來說,最好的做法是總是使用大括號「'{}'」和所有'if'語句。 – zaph 2015-10-02 13:42:43

0

iOS中不再可能直接檢索設備序列號。

但是,如果它只是一個企業內部的應用程序,這是我工作的公司將要實現的是:

在設備配置,複製序列號和設置設備名稱爲序列號。

然後使用Apple的UIDevice API來檢索設備名稱。