2013-06-26 53 views
3

由於不推薦使用UDID,因此我使用供應商標識符,但使用此應用程序後,在iOS版本低於6.0的設備中無法使用。任何人都可以告訴我需要做什麼?該應用是否僅支持iOS 6.0及以上版本?如何在iOS版本低於6.0的設備上開啓我的應用功能?下面是我使用的代碼:供應商標識符在iOS 5.0版本中不起作用

static NSString *uniqueIdentifier = nil; 
id vendorIdObject = [[UIDevice currentDevice] identifierForVendor]; 
uniqueIdentifier = [vendorIdObject UUIDString]; 

回答

0

可能的解決辦法:

  1. 檢查iOS版本在運行時
  2. 如果是的iOS 6+使用identifierForVendor
  3. 如果小於iOS 6使用uniqueIdentifier

編輯:由於rm阿迪說,該appstore會拒絕該應用程序。

所以最好的方法是使用CFUUIDCreate()

CFUUIDRef locUDIDRef = CFUUIDCreate(NULL); 
CFStringRef locUDIDRefString = CFUUIDCreateString(NULL, locUDIDRef); 
NSString *locUDID = [NSString stringWithString:(NSString *) locUDIDRefString]; 
CFRelease(locUDIDRef); 
CFRelease(uuidStringRef); 

參考Alternatives for UDID in iOS 6

+0

除蘋果公司拒絕任何調用'uniqueIdentifier'的應用程序的細微小細節外。 – rmaddy

+0

@Midhun,我已經完成了這些步驟,Apple仍然會檢查它是否包含「uniqueIdentifier」。那麼如何才能使iOS版本低於6.0 –

+0

@rmaddy:你是對的。所以最好的方法是使用'CFUUIDCreate()' –

6

你可以做這樣的事情(注意,這個返回的標識沒有被綁定到該設備,並會改變如果用戶刪除並重新安裝應用程序):

NSString* uniqueIdentifier = nil; 
if([UIDevice instancesRespondToSelector:@selector(identifierForVendor)]) { 
    // iOS 6+ 
    uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
} else { 
    // before iOS 6, so just generate an identifier and store it 
    uniqueIdentifier = [[NSUserDefaults standardUserDefaults] objectForKey:@"identiferForVendor"]; 
    if(!uniqueIdentifier) { 
    CFUUIDRef uuid = CFUUIDCreate(NULL); 
    uniqueIdentifier = (__bridge_transfer NSString*)CFUUIDCreateString(NULL, uuid); 
    CFRelease(uuid); 
    [[NSUserDefaults standardUserDefaults] setObject:uniqueIdentifier forKey:@"identifierForVendor"]; 
    } 
} 

這將生成標識符pre-iOS-6並將其存儲爲默認值,以便它通常具有相同的標識符。如果您有一個鑰匙串組和一組需要使用該標識符的應用程序,與identifierForVendor類似,您可以將其存儲在鑰匙串中而不是用戶默認值。

+0

用戶默認設置可以從備份恢復到其他設備。將標識符存儲在從備份中排除的文件中([QA1719](http://developer.apple.com/library/ios/#qa/qa1719/))可能會更好。 – vmus

相關問題