苹果手机唯一标示
2016-03-30 10:30
295 查看
苹果手机唯一标示 是手机串号,同一个手机是固定不变的,(就像楠哥说的,变了我们 就没法写了)
2016-03-30 09:45:49.403 YuFu_Wallet[8316:1868009] -[YFRequest transformPara:] [Line 89]输入参数para = {
application = "looppicList.Req";
pluginSerialNo = 39902313754794920545175833582982;
pluginVersion = "1.0.1";
sourceType = 1;
terminalModel = 3GW100;
terminalOs = "iPhone OS 9.2.1";
terminalPhysicalNo = "22FC6C6A-1030-4103-BB9C-F11DB0B891C9"; //这个字段就是串号
type = 1;
version = "1.0.0";
}
一般这些基本信息 都会封装在请求头里面,
@interface YFDeviceModel :NSObject
//<FK terminalPhysicalNo="2E1DEDA1B6E6C4D4E251C44541191CA6"
//pluginSerialNo="1.0" pluginVersion="1.0.0" terminalOs="Android 2.3"
//terminalModel="3GW100" version="1.0.0" application="UserLogin.Req">
@property (strong,nonatomic)
NSString *version; //通讯协议版本号
@property (strong,nonatomic)
NSString *pluginSerialNo; //插件编号
@property (strong,nonatomic)
NSString *pluginVersion; //插件版本号
@property (strong,nonatomic)
NSString *terminalOs; //终端系统
@property (strong,nonatomic)
NSString *terminalModel; //终端类型
@property (strong,nonatomic)
NSString *terminalPhysicalNo;//手机串号
@end
#import "YFDeviceModel.h"
@implementation YFDeviceModel
//<FK terminalPhysicalNo="2E1DEDA1B6E6C4D4E251C44541191CA6"
//pluginSerialNo="1.0" pluginVersion="1.0.0" terminalOs="Android 2.3"
//terminalModel="3GW100" version="1.0.0" application="UserLogin.Req">
- (NSString *)version
{
return@"1.0.0";
}
- (NSString *)pluginSerialNo
{
return@"1.0";
}
- (NSString *)pluginVersion
{
return@"1.0.1";
}
- (NSString *)terminalOs
{
return [NSStringstringWithFormat:@"%@ %@",[UIDevicecurrentDevice].systemName,[UIDevicecurrentDevice].systemVersion];
}
- (NSString *)terminalModel
{
return@"3GW100";
}
- (NSString *)terminalPhysicalNo
{
return [[UIDevicecurrentDevice].identifierForVendorUUIDString];
}
@end
//
- (NSData *)transformPara:(NSDictionary *)para
{
NSMutableDictionary *dicData = [[NSMutableDictionaryalloc]
initWithDictionary:para];
YFDeviceModel *device = [[YFDeviceModelalloc]
init];
[dicData setObject:device.versionforKey:@"version"];
[dicData setObject:device.terminalModelforKey:@"terminalModel"];
[dicData setObject:device.terminalOsforKey:@"terminalOs"];
[dicData setObject:device.pluginVersionforKey:@"pluginVersion"];
if ([USER_DEFAULTobjectForKey:kPassKey])
{
[dicData setObject:[USER_DEFAULTobjectForKey:kPassKey]forKey:@"pluginSerialNo"];
}else{
[dicData setObject:device.pluginSerialNoforKey:@"pluginSerialNo"];
}
[dicData setObject:device.terminalPhysicalNoforKey:@"terminalPhysicalNo"];
[dicData setObject:@"1"forKey:@"sourceType"];
DLog(@"输入参数para = %@",dicData);
NSError *error;
NSData *data = [NSJSONSerializationdataWithJSONObject:dicData
options:NSJSONWritingPrettyPrintederror:&error];
// if (!error) {
// NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// DLog(@"输入参数str = %@",str);
// }
return data;
}
// 构造请求 。。。。。
- (NSMutableURLRequest *)getUrlRequest:(NSData *)data
{
NSString *stringUrl;
stringUrl = [NSStringstringWithFormat:@"%@/metwallet/index/json",kWaiWang];
NSString *encodeStr = [stringUrlstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURLURLWithString:encodeStr];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc]
initWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:20.0f];
[request setHTTPMethod:@"POST"];
// [request addValue: @"application/xml;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json;charset=utf-8"forHTTPHeaderField:@"Content-Type"];
[request addValue:[USER_DEFAULTobjectForKey:kUserId]forHTTPHeaderField:@"userId"];
[request setHTTPBody:[selfencodeXML:data]];
return request;
}
//分控包里面打出来的串 里面有手机的各种信息
3|1006:22FC6C6A-1030-4103-BB9C-F11DB0B891C9|1009:0|1014:750 * 1334|1015:iPhone8,1|1016:iPhone OS|1018:IOS|1019:9.2.1|1020:zh-Hans-CN|1025:3.51G|1026:8.26G|1027:0.810000|1030:zh_CN|1031:GMT+0800 (GMT+8) offset 28800|1032:192.168.7.128|1040:0.000000|1042:0.000000|1043:0.000000|1044:0.000000|1045:0.000000|1046:0.000000|2055:WIFI连接
另外查找一些资料,通过验证,
苹果设备有个先天的东西符合这个需求,UDID,这个东东用iTunes就可以看到,每个设备唯一。并且苹果提供了一个uniqueIdentifier的属性,可以用来获得这个值。代码看起来这样:
[[UIDevicecurrentDevice]uniqueIdentifier];
看起来真的不错,不过且慢高兴,问题是苹果在iOS5之后废除了这个API,也就是说如果你的设备运行在iOS5之后,这个API就不能用了。
到iOS5之后,虽然这个UDID不能获得了,但大家伙找了另一条路来判定iOS设备——MAC地址,苹果没有直接提供API,但还是可以获得,应用可以正常的工作,上架。这段代码在《iOS上获得MAC地址》这篇blog里面列出了。
大家又顺利的工作了一阵,直到iOS7横空出世,走到了大家跟前。——苹果通过技术手段让MAC的获取也不行了,每次都返回一个特殊固定的值。
确定设备的需求仍然是存在的,苹果在iOS7里面也很贴心的给出了一条路,identifierForVendor,使用起来就是:
[[UIDevicecurrentDevice]identifierForVendor];
问题得到了解决,苹果在关上一扇门的时候打开了一扇窗,而且这个API估计苹果不会再次废弃了。不过,问题真的解决了么?没有,答案还是没有,如果你删除应用然后再次安装,这个identifierForVendor的值就变了!!!(其实我试过好几次,重装,卸载等等,串号始终都是22FC6C6A-1030-4103-BB9C-F11DB0B891C9 没有任何变化 )
考虑到多种操作情形,删除应用重装,系统升级,系统还原,系统重刷,目前就没有可靠的办法来标识唯一性的设备了!但需求肯定是存在的,也实实在在放在那里,下面就拭目以待,看苹果怎么处理了。
2016-03-30 09:45:49.403 YuFu_Wallet[8316:1868009] -[YFRequest transformPara:] [Line 89]输入参数para = {
application = "looppicList.Req";
pluginSerialNo = 39902313754794920545175833582982;
pluginVersion = "1.0.1";
sourceType = 1;
terminalModel = 3GW100;
terminalOs = "iPhone OS 9.2.1";
terminalPhysicalNo = "22FC6C6A-1030-4103-BB9C-F11DB0B891C9"; //这个字段就是串号
type = 1;
version = "1.0.0";
}
一般这些基本信息 都会封装在请求头里面,
@interface YFDeviceModel :NSObject
//<FK terminalPhysicalNo="2E1DEDA1B6E6C4D4E251C44541191CA6"
//pluginSerialNo="1.0" pluginVersion="1.0.0" terminalOs="Android 2.3"
//terminalModel="3GW100" version="1.0.0" application="UserLogin.Req">
@property (strong,nonatomic)
NSString *version; //通讯协议版本号
@property (strong,nonatomic)
NSString *pluginSerialNo; //插件编号
@property (strong,nonatomic)
NSString *pluginVersion; //插件版本号
@property (strong,nonatomic)
NSString *terminalOs; //终端系统
@property (strong,nonatomic)
NSString *terminalModel; //终端类型
@property (strong,nonatomic)
NSString *terminalPhysicalNo;//手机串号
@end
#import "YFDeviceModel.h"
@implementation YFDeviceModel
//<FK terminalPhysicalNo="2E1DEDA1B6E6C4D4E251C44541191CA6"
//pluginSerialNo="1.0" pluginVersion="1.0.0" terminalOs="Android 2.3"
//terminalModel="3GW100" version="1.0.0" application="UserLogin.Req">
- (NSString *)version
{
return@"1.0.0";
}
- (NSString *)pluginSerialNo
{
return@"1.0";
}
- (NSString *)pluginVersion
{
return@"1.0.1";
}
- (NSString *)terminalOs
{
return [NSStringstringWithFormat:@"%@ %@",[UIDevicecurrentDevice].systemName,[UIDevicecurrentDevice].systemVersion];
}
- (NSString *)terminalModel
{
return@"3GW100";
}
- (NSString *)terminalPhysicalNo
{
return [[UIDevicecurrentDevice].identifierForVendorUUIDString];
}
@end
//
- (NSData *)transformPara:(NSDictionary *)para
{
NSMutableDictionary *dicData = [[NSMutableDictionaryalloc]
initWithDictionary:para];
YFDeviceModel *device = [[YFDeviceModelalloc]
init];
[dicData setObject:device.versionforKey:@"version"];
[dicData setObject:device.terminalModelforKey:@"terminalModel"];
[dicData setObject:device.terminalOsforKey:@"terminalOs"];
[dicData setObject:device.pluginVersionforKey:@"pluginVersion"];
if ([USER_DEFAULTobjectForKey:kPassKey])
{
[dicData setObject:[USER_DEFAULTobjectForKey:kPassKey]forKey:@"pluginSerialNo"];
}else{
[dicData setObject:device.pluginSerialNoforKey:@"pluginSerialNo"];
}
[dicData setObject:device.terminalPhysicalNoforKey:@"terminalPhysicalNo"];
[dicData setObject:@"1"forKey:@"sourceType"];
DLog(@"输入参数para = %@",dicData);
NSError *error;
NSData *data = [NSJSONSerializationdataWithJSONObject:dicData
options:NSJSONWritingPrettyPrintederror:&error];
// if (!error) {
// NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// DLog(@"输入参数str = %@",str);
// }
return data;
}
// 构造请求 。。。。。
- (NSMutableURLRequest *)getUrlRequest:(NSData *)data
{
NSString *stringUrl;
stringUrl = [NSStringstringWithFormat:@"%@/metwallet/index/json",kWaiWang];
NSString *encodeStr = [stringUrlstringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURLURLWithString:encodeStr];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc]
initWithURL:urlcachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:20.0f];
[request setHTTPMethod:@"POST"];
// [request addValue: @"application/xml;charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json;charset=utf-8"forHTTPHeaderField:@"Content-Type"];
[request addValue:[USER_DEFAULTobjectForKey:kUserId]forHTTPHeaderField:@"userId"];
[request setHTTPBody:[selfencodeXML:data]];
return request;
}
//分控包里面打出来的串 里面有手机的各种信息
3|1006:22FC6C6A-1030-4103-BB9C-F11DB0B891C9|1009:0|1014:750 * 1334|1015:iPhone8,1|1016:iPhone OS|1018:IOS|1019:9.2.1|1020:zh-Hans-CN|1025:3.51G|1026:8.26G|1027:0.810000|1030:zh_CN|1031:GMT+0800 (GMT+8) offset 28800|1032:192.168.7.128|1040:0.000000|1042:0.000000|1043:0.000000|1044:0.000000|1045:0.000000|1046:0.000000|2055:WIFI连接
另外查找一些资料,通过验证,
苹果设备有个先天的东西符合这个需求,UDID,这个东东用iTunes就可以看到,每个设备唯一。并且苹果提供了一个uniqueIdentifier的属性,可以用来获得这个值。代码看起来这样:
[[UIDevicecurrentDevice]uniqueIdentifier];
看起来真的不错,不过且慢高兴,问题是苹果在iOS5之后废除了这个API,也就是说如果你的设备运行在iOS5之后,这个API就不能用了。
到iOS5之后,虽然这个UDID不能获得了,但大家伙找了另一条路来判定iOS设备——MAC地址,苹果没有直接提供API,但还是可以获得,应用可以正常的工作,上架。这段代码在《iOS上获得MAC地址》这篇blog里面列出了。
大家又顺利的工作了一阵,直到iOS7横空出世,走到了大家跟前。——苹果通过技术手段让MAC的获取也不行了,每次都返回一个特殊固定的值。
确定设备的需求仍然是存在的,苹果在iOS7里面也很贴心的给出了一条路,identifierForVendor,使用起来就是:
[[UIDevicecurrentDevice]identifierForVendor];
问题得到了解决,苹果在关上一扇门的时候打开了一扇窗,而且这个API估计苹果不会再次废弃了。不过,问题真的解决了么?没有,答案还是没有,如果你删除应用然后再次安装,这个identifierForVendor的值就变了!!!(其实我试过好几次,重装,卸载等等,串号始终都是22FC6C6A-1030-4103-BB9C-F11DB0B891C9 没有任何变化 )
考虑到多种操作情形,删除应用重装,系统升级,系统还原,系统重刷,目前就没有可靠的办法来标识唯一性的设备了!但需求肯定是存在的,也实实在在放在那里,下面就拭目以待,看苹果怎么处理了。
相关文章推荐
- 深入理解JVM(二)-OutOfMemoryError异常
- 浅谈软件架构师的素质与职责
- ##TableView实现多选,并限制选择个数
- 三大WEB服务器(Apache、Nginx、Lighttpd)对比
- 算法训练 删除数组零元素
- Http协议总结
- Java基础知识强化之IO流笔记83:NIO与IO
- 乙女心,养的第一株多肉小植物
- 求数组中未出现的最小正整数
- Linux时间子系统之(五):POSIX Clock
- 题目记录
- cygwin1.dll is missing from your computer
- file_operations -- file -- inode
- Linux 系统调用
- Linux 的虚拟文件系统--各结构之间的联系
- I-O 端口和 I-O 内存
- 9.4. 使用 I/O 内存
- Linux 2.6内核的编译步骤及模块动态加载
- experiment目录递归,indent C standard style
- 递归法遍历目录查找文件