2011-12-31 156 views

回答

1

不,它不會改變。但請注意,現在是deprecated(可能是由於隱私問題)。

0

您可以創建自己的'UUID',只要您的應用程序在設備上,該UUID就會一直存在。

+ (NSString *)localUuid { 
    NSString *ident = [[NSUserDefaults standardUserDefaults] objectForKey:@"unique identifier stored for app"]; 
    if (!ident) { 
     CFUUIDRef uuidRef = CFUUIDCreate(NULL); 
     CFStringRef uuidStringRef = CFUUIDCreateString(NULL, uuidRef); 
     CFRelease(uuidRef); 
     ident = [NSString stringWithString:(NSString *)uuidStringRef]; 
     CFRelease(uuidStringRef); 
     [[NSUserDefaults standardUserDefaults] setObject:ident forKey:@"unique identifier stored for app"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
    return ident; 
} 

但是這不會給你一個唯一的ID,你可以在應用程序中使用的原因很明顯。另外alternative is using the MAC address

#import <sys/types.h> 
#import <sys/socket.h> 
#import <sys/sysctl.h> 
#import <sys/time.h> 
#import <netinet/in.h> 
#import <net/if_dl.h> 
#import <netdb.h> 
#import <errno.h> 
#import <arpa/inet.h> 
#import <unistd.hv 
#import <ifaddrs.h> 

#if !defined(IFT_ETHER) 
    #define IFT_ETHER 0x6 
#endif 

@implementation MACIdentify 

- (NSString*)MACAddress { 
    NSMutableString* result = [NSMutableString string]; 

    BOOL success; 
    struct ifaddrs* addrs; 
    const struct ifaddrs* cursor; 
    const struct sockaddr_dl* dlAddr; 
    const uint8_t * base; 
    int i; 

    success = (getifaddrs(&addrs) == 0); 
    if(success) 
    { 
     cursor = addrs; 
     while(cursor != NULL) 
     { 
      if((cursor->ifa_addr->sa_family == AF_LINK) && (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type == IFT_ETHER)) 
      { 
       dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr; 

       base = (const uint8_t *) &dlAddr->sdl_data[dlAddr->sdl_nlen]; 

       for(i=0; isdl_alen; i++) 
       { 
        if(i != 0) 
        { 
         [result appendString:@":"]; 
        } 
        [result appendFormat:@"%02x", base[i]]; 
       } 
      } 
      cursor = cursor->ifa_next; 
     } 
     freeifaddrs(addrs); 
    } 

    return result; 
} 

@end 
+2

這不是他所問的。 – Abizern 2011-12-31 16:20:38

+0

另外,正如@HaggleLad在[我對另一個問題的回答](http://stackoverflow.com/a/6993440/400056)的評論中指出的那樣,出於隱私原因,原樣使用MAC並不是一個好主意。它應該被混淆,例如通過用MD5或SHA1對其進行哈希處理。 – DarkDust 2011-12-31 16:48:40

0

不,它不。它將永遠保持不變。

-1

在運行Apple股票操作系統的iOS設備上,UDID從不改變。

在運行根/修改操作系統的設備上,任何API返回的值都可能是聰明的修飾符想要的值。