iOS设备的uuid是否会随着软件更新或任何相关内容而发生变化?
答案 0 :(得分:1)
不,它没有改变。但请注意,它现在是deprecated(可能是出于隐私问题)。
答案 1 :(得分: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 :(得分:0)
不,不。它将始终保持不变。
答案 3 :(得分:-1)
在运行Apple股票操作系统的iOS设备上,UDID永远不会改变。
在运行root / modified操作系统的设备上,任何API返回的值都可以是聪明修饰符想要的值。