2011-09-09 64 views
4

我正在訂購預訂應用程序。我需要從iPhone/iOS設備發送一個唯一的密鑰到服務器。使用iPhone或iOS設備的唯一標識

我可以使用iPhone的GUID嗎?即[UIDevice uniqueIdentifier]合法嗎?法律手段將蘋果接受?

用來唯一標識iPhone或iOS設備的最佳屬性是什麼? 如果不是,那麼唯一識別設備的另一種方式是什麼。

其實我需要預訂參考號。由應用生成。必須是唯一的。

+0

你從哪裏得到這個GUID?什麼API? –

+0

我不完全確定你的意思是「它是否合法」。 – NotMe

+1

我建議你識別用戶而不是設備。用戶可以更改設備。 ;-) –

回答

3

創建UUID:包含UUID的字符串。以ASCII表示的UUID的標準格式是用連字符打斷的字符串,例如68753A44-4D6F-1226-9C60-0050E4C00067。

+ (NSString *)newUUID 
{ 
    CFUUIDRef theUUID = CFUUIDCreate(NULL); 
    CFStringRef string = CFUUIDCreateString(NULL, theUUID); 
    CFRelease(theUUID); 
    return (NSString *)string; 
} 
+2

這可能由[UIDevice uniqueIdentifier]生成。這將是唯一的,但蘋果不會接受使用設備ID – Mann

4

沒有我知道的GUID,你的意思是[UIDevice uniqueIdentifier]?你可以使用它,但它在iOS 5中已被棄用,所以你最好想出一些其他方法來識別你的設備。

+0

是的,使用這個ID做任何事情都是一個壞主意。坦率地說,我不認爲蘋果應該包含它。 – NotMe

+0

還有什麼意思? – Mann

+0

我需要預訂參考號。必須是唯一的 – Mann

1

我指的不是什麼保密協議,但給一個嘗試這種solution,因爲筆者通告「它根據與束標識符組合設備的MAC地址的唯一標識。」但是請注意,越獄設備可以更改其MAC地址AFAIK。

+0

Apple是否接受使用此技術的應用程序? – devios1

0

與iOS 6來到identifierForVendor,可以跨多個應用從相同的供應商使用,並且雖然它識別裝置可以結合的iCloud的鍵值存儲使用它例如,以確定在不同設備的用戶。

奧萊Begemann解釋這一切很好地在他的博客:http://oleb.net/blog/2012/09/udid-apis-in-ios-6/

5

蘋果公司日前宣佈,2013年5月將開始拒絕使用UDID的應用程序來跟蹤用戶行爲

這是對替代UDID:

您可以創建UIApplication的,的UIDevice的類別或您prefere像這樣(ARC例子)

@interface UIApplication (utilities) 
- (NSString*)getUUID; 
@end 

@implementation UIApplication (utilities) 

- (NSString*)getUUID { 

    NSUserDefaults *standardUserDefault = [NSUserDefaults standardUserDefaults]; 

    static NSString *uuid = nil; 

    // try to get the NSUserDefault identifier if exist 
    if (uuid == nil) { 

     uuid = [standardUserDefault objectForKey:@"UniversalUniqueIdentifier"]; 
    } 

    // if there is not NSUserDefault identifier generate one and store it 
    if (uuid == nil) { 

     uuid = UUID(); 
     [standardUserDefault setObject:uuid forKey:@"UniversalUniqueIdentifier"]; 
     [standardUserDefault synchronize]; 
    } 

    return uuid; 
} 

@end 

UUID()是這個函數

NSString* UUID() { 

    CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
    CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
    CFRelease(uuidRef); 
    return (__bridge NSString *)uuidStringRef; 
} 

此生成存儲到NSUserDefault一個唯一的標識符,以每當應用程序需要它被再利用 - 該標識符唯一相關的應用程序安裝不到該設備,但也可以使用例如採取跟蹤有關該號碼的設備預訂的APN服務等等

之後,你可以這樣使用它:

NSString *uuid = [[UIApplication sharedApplication] getUUID];