您的位置:首页 > 移动开发 > IOS开发

网上搜集到iOS开发中获取手机IDFA,手机序列号,设备名称,别名,分辨率等信息,这里做个总结

2016-09-21 11:29 676 查看
下述函数中写入获取信息的代码

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions{
}

获取分辨率:

CGRect rect_screen = [[UIScreen mainScreen] bounds];
CGFloat scale_screen= [[UIScreen mainScreen] scale];
CGSize size_screen = rect_screen.size;
NSLog(@"rect_screen:%@",NSStringFromCGRect(rect_screen));
NSLog(@"size_screen:%@",NSStringFromCGSize(size_screen));
NSLog(@"scale_screen:%f",scale_screen);
int width =(int)size_screen.width*scale_screen;
int height =(int)size_screen.height*scale_screen;
NSLog(@"%d",width);
NSLog(@"%d",height);
NSString *stringwidth = [NSString stringWithFormat:@"%d",width];
NSString *stringheight = [NSString stringWithFormat:@"%d",height];


获取IDFA:

NSString *adId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSLog(@"IDFA: %@",adId);

获取手机序列号:

NSString* identifierNumber = [[UIDevice currentDevice] uniqueIdentifier];
NSLog(@"手机序列号: %@",identifierNumber);

注:上面一个已经被苹果禁止了。建议使用uuid,IDFA代替。

获取手机别名:
NSString* userPhoneName = [[UIDevice currentDevice] name];
NSLog(@"手机别名: %@", userPhoneName);

获取设备名称:

NSString* deviceName = [[UIDevice currentDevice] systemName];
NSLog(@"设备名称: %@",deviceName );

获取手机系统版本:
NSString* phoneVersion = [[UIDevice currentDevice] systemVersion];
NSLog(@"手机系统版本: %@", phoneVersion);

获取当前应用名称:
NSString *appCurName = [infoDictionary objectForKey:@"CFBundleDisplayName"];
NSLog(@"当前应用名称:%@",appCurName);

获取当前应用软件版本:
NSString *appCurVersion = [infoDictionary objectForKey:@"CFBundleShortVersionString"];

NSLog(@"当前应用软件版本:%@",appCurVersion);

获取当前应用版本号码:
NSString *appCurVersionNum = [infoDictionary objectForKey:@"CFBundleVersion"];
NSLog(@"当前应用版本号码:%@",appCurVersionNum);

获取当前日期,时间:
NSDate *currentDate = [NSDate date];//获取当前时间,日期
NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];
NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter1 setDateFormat:@"YYYY-MM-dd"];
[dateFormatter2 setDateFormat:@"hh:mm:ss"];
NSString *dateString = [dateFormatter1 stringFromDate:currentDate];
NSString *timeString = [dateFormatter2 stringFromDate:currentDate];
NSLog(@"dateString:%@",dateString);
NSLog(@"timeString:%@",timeString);

获取当前手机型号时需要自己写个方法,即iphoneType,调用即可:
NSString* phoneModel = [UnityAppController iphoneType];
NSLog(@"当前手机型号:%@",phoneModel);


iphoneType函数写成类方法,所以我调用时使用的是方法所在文件名(UnityAppController)+方法(iphoneType)来调用。

iphoneType方法如下:
+ (NSString *)iphoneType {
struct utsname systemInfo;

uname(&systemInfo);

NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];

if ([platform isEqualToString:@"iPhone1,1"]) return @"iPhone 2G";

if ([platform isEqualToString:@"iPhone1,2"]) return @"iPhone 3G";

if ([platform isEqualToString:@"iPhone2,1"]) return @"iPhone 3GS";

if ([platform isEqualToString:@"iPhone3,1"]) return @"iPhone 4";

if ([platform isEqualToString:@"iPhone3,2"]) return @"iPhone 4";

if ([platform isEqualToString:@"iPhone3,3"]) return @"iPhone 4";

if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";

if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5";

if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5";

if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c";

if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c";

if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s";

if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s";

if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";

if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6";

if ([platform isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";

if ([platform isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";

if ([platform isEqualToString:@"iPhone8,4"]) return @"iPhone SE";

if ([platform isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";

if ([platform isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";

if ([platform isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";

if ([platform isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";

if ([platform isEqualToString:@"iPod5,1"]) return @"iPod Touch 5G";

if ([platform isEqualToString:@"iPad1,1"]) return @"iPad 1G";

if ([platform isEqualToString:@"iPad2,1"]) return @"iPad 2";

if ([platform isEqualToString:@"iPad2,2"]) return @"iPad 2";

if ([platform isEqualToString:@"iPad2,3"]) return @"iPad 2";

if ([platform isEqualToString:@"iPad2,4"]) return @"iPad 2";

if ([platform isEqualToString:@"iPad2,5"]) return @"iPad Mini 1G";

if ([platform isEqualToString:@"iPad2,6"]) return @"iPad Mini 1G";

if ([platform isEqualToString:@"iPad2,7"]) return @"iPad Mini 1G";

if ([platform isEqualToString:@"iPad3,1"]) return @"iPad 3";

if ([platform isEqualToString:@"iPad3,2"]) return @"iPad 3";

if ([platform isEqualToString:@"iPad3,3"]) return @"iPad 3";

if ([platform isEqualToString:@"iPad3,4"]) return @"iPad 4";

if ([platform isEqualToString:@"iPad3,5"]) return @"iPad 4";

if ([platform isEqualToString:@"iPad3,6"]) return @"iPad 4";

if ([platform isEqualToString:@"iPad4,1"]) return @"iPad Air";

if ([platform isEqualToString:@"iPad4,2"]) return @"iPad Air";

if ([platform isEqualToString:@"iPad4,3"]) return @"iPad Air";

if ([platform isEqualToString:@"iPad4,4"]) return @"iPad Mini 2G";

if ([platform isEqualToString:@"iPad4,5"]) return @"iPad Mini 2G";

if ([platform isEqualToString:@"iPad4,6"]) return @"iPad Mini 2G";

if ([platform isEqualToString:@"i386"])   return @"iPhone Simulator";

if ([platform isEqualToString:@"x86_64"])  return @"iPhone Simulator";

return platform;

}

获取ip地址时与上述类似,写了一个获取ip的方法:
+ (NSString *)getIPAddress {
NSString *address = @"error";
struct ifaddrs *interfaces = NULL;
struct ifaddrs *temp_addr = NULL;
int success = 0;
// retrieve the current interfaces - returns 0 on success
success =getifaddrs(&interfaces);
if (success == 0) {
// Loop through linked list of interfaces
temp_addr = interfaces;
while(temp_addr != NULL) {
if(temp_addr->ifa_addr->sa_family == AF_INET) {
// Check if interface is en0 which is the wifi connection on the iPhone
if([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
// Get NSString from C String
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
}
}
temp_addr = temp_addr->ifa_next;
}
}
// Free memory
freeifaddrs(interfaces);
return address;}

然后调用:
NSString* ipAdress = [UnityAppController getIPAddress];
NSLog(@"ipAdress:%@",ipAdress);

但是!!!这个方法获取的是局域网的ip;想要获取外网ip可以使用:
- (void)urlRequestOperation{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSString *URLTmp1 = @"http://1212.ip138.com/ic.asp";
NSString *URLTmp = [URLTmp1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSData * resData = [NSData dataWithContentsOfURL:[NSURL URLWithString:URLTmp]];
dispatch_async(dispatch_get_main_queue(), ^{
if (resData) {
//系统自带JSON解析
NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
//您的IP是:[122.222.122.22] 来自:上海市某某区 某某运营商
NSString *str3 = [[NSString alloc] initWithData:resData encoding:gbkEncoding];
NSLog(@"%@",str3);
}
});
});
}

但是!!!获取的字符串str3里包含了整个网页的信息,所以需要截取ip的部分。

所以获取外网ip要用:

NSError *error;
NSURL *ipURL = [NSURL URLWithString:@"http://ifconfig.me/ip"];
NSString *ip = [NSString stringWithContentsOfURL:ipURL encoding:NSUTF8StringEncoding error:&error];


最后最后,记得加上需要的头文件,这里提供几个:
#import <UIKit/UIKit.h>
#import <sys/utsname.h>
#import <AdSupport/AdSupport.h>
#import <ifaddrs.h>
#import <arpa/inet.h>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: