Author:si1ence
Link:http://www.jianshu.com/p/b23016bb97af
為了統(tǒng)計(jì)用戶信息、下發(fā)廣告,服務(wù)器端往往需要手機(jī)用戶設(shè)備及app的各種信息,下面講述一下各種信息的獲取方式:
?
點(diǎn)擊下載以上展示效果的GitHub源碼
// 這個方法后面會列出來NSString *deviceName =
[self getDeviceName];NSLog(@"設(shè)備型號-->%@", deviceName);NSString *iPhoneName =
[UIDevice currentDevice].name;NSLog(@"iPhone名稱-->%@", iPhoneName); NSString *appVerion = [[[NSBundle mainBundle] infoDictionary] objectForKey:
@"CFBundleShortVersionString"];NSLog(@"app版本號-->%@", appVerion);CGFloat batteryLevel =
[[UIDevice currentDevice] batteryLevel];NSLog(@"電池電量-->%f", batteryLevel);NSString *localizedModel =
[UIDevice currentDevice].localizedModel;NSLog(@"localizedModel-->%@", localizedModel);NSString *systemName =
[UIDevice currentDevice].systemName;NSLog(@"當(dāng)前系統(tǒng)名稱-->%@", systemName);NSString *systemVersion =
[UIDevice currentDevice].systemVersion;NSLog(@"當(dāng)前系統(tǒng)版本號-->%@", systemVersion);struct utsname systemInfo;uname(&
systemInfo);NSString *device_model =
[NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];NSLog(@"device_model-->%@", device_model);// 這個方法后面會單獨(dú)列出NSString *macAddress =
[self getMacAddress];NSLog(@"macAddress-->%@", macAddress);// 這個方法后面會單獨(dú)列出NSString *deviceIP =
[self getDeviceIPAddresses];NSLog(@"deviceIP-->%@", deviceIP);
- 廣告位標(biāo)識符:在同一個設(shè)備上的所有App都會取到相同的值,是蘋果專門給各廣告提供商用來追蹤用戶而設(shè)的,用戶可以在 設(shè)置|隱私|廣告追蹤里重置此id的值,或限制此id的使用,故此id有可能會取不到值,但好在Apple默認(rèn)是允許追蹤的,而且一般用戶都不知道有這么個設(shè)置,所以基本上用來監(jiān)測推廣效果
//廣告標(biāo)識
NSString *idfa =
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];NSLog(@"廣告位標(biāo)識符idfa-->%@", idfa);
- UUID是Universally Unique Identifier的縮寫,中文意思是通用唯一識別碼。它是讓分布式系統(tǒng)中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指 定。這樣,每個人都可以建立不與其它人沖突的 UUID。在此情況下,就不需考慮數(shù)據(jù)庫建立時的名稱重復(fù)問題。蘋果公司建議使用UUID為應(yīng)用生成唯一標(biāo)識字符串。
//UUIDNSString *uuid =
[[[UIDevice currentDevice] identifierForVendor] UUIDString];NSLog(@"唯一識別碼uuid-->%@", uuid);
// 獲取設(shè)備型號然后手動轉(zhuǎn)化為對應(yīng)名稱
- (NSString *
)getDeviceName
{// 需要#import "sys/utsname.h"#warning 題主嘔心瀝血總結(jié)!!最全面!親測!全網(wǎng)獨(dú)此一份!!struct utsname systemInfo;uname(&
systemInfo);NSString *deviceString =
[NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];if ([deviceString isEqualToString:
@"iPhone3,1"])
return @"iPhone 4";if ([deviceString isEqualToString:
@"iPhone3,2"])
return @"iPhone 4";if ([deviceString isEqualToString:
@"iPhone3,3"])
return @"iPhone 4";if ([deviceString isEqualToString:
@"iPhone4,1"])
return @"iPhone 4S";if ([deviceString isEqualToString:
@"iPhone5,1"])
return @"iPhone 5";if ([deviceString isEqualToString:
@"iPhone5,2"])
return @"iPhone 5 (GSM+CDMA)";if ([deviceString isEqualToString:
@"iPhone5,3"])
return @"iPhone 5c (GSM)";if ([deviceString isEqualToString:
@"iPhone5,4"])
return @"iPhone 5c (GSM+CDMA)";if ([deviceString isEqualToString:
@"iPhone6,1"])
return @"iPhone 5s (GSM)";if ([deviceString isEqualToString:
@"iPhone6,2"])
return @"iPhone 5s (GSM+CDMA)";if ([deviceString isEqualToString:
@"iPhone7,1"])
return @"iPhone 6 Plus";if ([deviceString isEqualToString:
@"iPhone7,2"])
return @"iPhone 6";if ([deviceString isEqualToString:
@"iPhone8,1"])
return @"iPhone 6s";if ([deviceString isEqualToString:
@"iPhone8,2"])
return @"iPhone 6s Plus";if ([deviceString isEqualToString:
@"iPhone8,4"])
return @"iPhone SE";if ([deviceString isEqualToString:
@"iPod1,1"])
return @"iPod Touch 1G";if ([deviceString isEqualToString:
@"iPod2,1"])
return @"iPod Touch 2G";if ([deviceString isEqualToString:
@"iPod3,1"])
return @"iPod Touch 3G";if ([deviceString isEqualToString:
@"iPod4,1"])
return @"iPod Touch 4G";if ([deviceString isEqualToString:
@"iPod5,1"])
return @"iPod Touch (5 Gen)";if ([deviceString isEqualToString:
@"iPad1,1"])
return @"iPad";if ([deviceString isEqualToString:
@"iPad1,2"])
return @"iPad 3G";if ([deviceString isEqualToString:
@"iPad2,1"])
return @"iPad 2 (WiFi)";if ([deviceString isEqualToString:
@"iPad2,2"])
return @"iPad 2";if ([deviceString isEqualToString:
@"iPad2,3"])
return @"iPad 2 (CDMA)";if ([deviceString isEqualToString:
@"iPad2,4"])
return @"iPad 2";if ([deviceString isEqualToString:
@"iPad2,5"])
return @"iPad Mini (WiFi)";if ([deviceString isEqualToString:
@"iPad2,6"])
return @"iPad Mini";if ([deviceString isEqualToString:
@"iPad2,7"])
return @"iPad Mini (GSM+CDMA)";if ([deviceString isEqualToString:
@"iPad3,1"])
return @"iPad 3 (WiFi)";if ([deviceString isEqualToString:
@"iPad3,2"])
return @"iPad 3 (GSM+CDMA)";if ([deviceString isEqualToString:
@"iPad3,3"])
return @"iPad 3";if ([deviceString isEqualToString:
@"iPad3,4"])
return @"iPad 4 (WiFi)";if ([deviceString isEqualToString:
@"iPad3,5"])
return @"iPad 4";if ([deviceString isEqualToString:
@"iPad3,6"])
return @"iPad 4 (GSM+CDMA)";if ([deviceString isEqualToString:
@"iPad4,1"])
return @"iPad Air (WiFi)";if ([deviceString isEqualToString:
@"iPad4,2"])
return @"iPad Air (Cellular)";if ([deviceString isEqualToString:
@"iPad4,4"])
return @"iPad Mini 2 (WiFi)";if ([deviceString isEqualToString:
@"iPad4,5"])
return @"iPad Mini 2 (Cellular)";if ([deviceString isEqualToString:
@"iPad4,6"])
return @"iPad Mini 2";if ([deviceString isEqualToString:
@"iPad4,7"])
return @"iPad Mini 3";if ([deviceString isEqualToString:
@"iPad4,8"])
return @"iPad Mini 3";if ([deviceString isEqualToString:
@"iPad4,9"])
return @"iPad Mini 3";if ([deviceString isEqualToString:
@"iPad5,1"])
return @"iPad Mini 4 (WiFi)";if ([deviceString isEqualToString:
@"iPad5,2"])
return @"iPad Mini 4 (LTE)";if ([deviceString isEqualToString:
@"iPad5,3"])
return @"iPad Air 2";if ([deviceString isEqualToString:
@"iPad5,4"])
return @"iPad Air 2";if ([deviceString isEqualToString:
@"iPad6,3"])
return @"iPad Pro 9.7";if ([deviceString isEqualToString:
@"iPad6,4"])
return @"iPad Pro 9.7";if ([deviceString isEqualToString:
@"iPad6,7"])
return @"iPad Pro 12.9";if ([deviceString isEqualToString:
@"iPad6,8"])
return @"iPad Pro 12.9";if ([deviceString isEqualToString:
@"i386"])
return @"Simulator";if ([deviceString isEqualToString:
@"x86_64"])
return @"Simulator";return deviceString;
} - (NSString *
)getMacAddress {int mib[
6];size_t len;char *
buf;unsigned char *
ptr;struct if_msghdr *
ifm;struct sockaddr_dl *
sdl;mib[0] =
CTL_NET;mib[1] =
AF_ROUTE;mib[2] =
0;mib[3] =
AF_LINK;mib[4] =
NET_RT_IFLIST;if ((mib[
5] = if_nametoindex(
"en0")) ==
0) {printf("Error: if_nametoindex error/n");return NULL;}if (sysctl(mib,
6, NULL, &len, NULL,
0) <
0) {printf("Error: sysctl, take 1/n");return NULL;}if ((buf = malloc(len)) ==
NULL) {printf("Could not allocate memory. error!/n");return NULL;}if (sysctl(mib,
6, buf, &len, NULL,
0) <
0) {printf("Error: sysctl, take 2");return NULL;}ifm = (
struct if_msghdr *
)buf;sdl = (
struct sockaddr_dl *)(ifm +
1);ptr = (unsigned
char *
)LLADDR(sdl);NSString *outstring = [NSString stringWithFormat:
@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+
1), *(ptr+
2), *(ptr+
3), *(ptr+
4), *(ptr+
5)];free(buf);return [outstring uppercaseString];
} - (NSString *
)getDeviceIPAddresses {int sockfd = socket(AF_INET, SOCK_DGRAM,
0);NSMutableArray *ips =
[NSMutableArray array];int BUFFERSIZE =
4096;struct ifconf ifc;char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *
cptr;struct ifreq *
ifr, ifrcopy;ifc.ifc_len =
BUFFERSIZE;ifc.ifc_buf =
buffer;if (ioctl(sockfd, SIOCGIFCONF, &ifc) >=
0){for (ptr = buffer; ptr < buffer +
ifc.ifc_len; ){ifr = (
struct ifreq *
)ptr;int len =
sizeof(
struct sockaddr);if (ifr->ifr_addr.sa_len >
len) {len = ifr->
ifr_addr.sa_len;}ptr +=
sizeof(ifr->ifr_name) +
len;if (ifr->ifr_addr.sa_family != AF_INET)
continue;if ((cptr = (
char *)strchr(ifr->ifr_name,
':')) != NULL) *cptr =
0;if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) ==
0)
continue;memcpy(lastname, ifr->
ifr_name, IFNAMSIZ);ifrcopy = *
ifr;ioctl(sockfd, SIOCGIFFLAGS, &
ifrcopy);if ((ifrcopy.ifr_flags & IFF_UP) ==
0)
continue;NSString *ip = [NSString stringWithFormat:
@"%s", inet_ntoa(((
struct sockaddr_in *)&ifr->ifr_addr)->
sin_addr)];[ips addObject:ip];}}close(sockfd);NSString *deviceIP =
@"";for (
int i=
0; i < ips.count; i++
) {if (ips.count >
0) {deviceIP = [NSString stringWithFormat:
@"%@",ips.lastObject];}}return deviceIP;
} ?
轉(zhuǎn)載于:https://www.cnblogs.com/XYQ-208910/p/5672577.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀
總結(jié)
以上是生活随笔為你收集整理的iOS: iOS各种设备信息获取的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。