关于iOS设备的那些事
首先推荐一个在用的库XYQuick 地址:https://github.com/uxyheaven/XYQuick
idfa:
获取方式
[ASIdentifierManager sharedManager].advertisingIdentifier.UUIDString
每个设备只有一个IDFA,不同APP在同一设备上获取IDFA的结果是一样的
设备重启不会产生新的IDFA
但IDFA存在重新生成的情况:
用户完全重置系统(设置程序 -> 通用 -> 还原 -> 还原位置与隐私)
用户明确还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符)
Appstore禁止不使用广告而采集IDFA的app上架
检查代码中是否使用了idfa
1、打开终端cd到要检查的文件的根目录。
2、执行下列语句:grep -r advertisingIdentifier . (别少了最后那个点号)。
由于idfa会出现取不到的情况,故绝不可以作为业务分析的主id,来识别用户
或者当idfa取不到就使用另外的方法生成具有相同作用的标示符存储在钥匙串中
idfv:
获取方式
[UIDevice currentDevice].identifierForVendor.UUIDString
特点: 根据vendor的值,如果vendor相同,则返回同一字符串;如果vendor不同,则返回不同的字符串。
vendor解释:英文解释为卖家,小贩。根据xcode文档解释,正常情况下,会根据App Store提供的数据进行判断。但是如果app不是通过app store进行安装的(如企业应用或开发调试阶段),那么会根据bundle ID判断。
判断准则:参考官方说明 com.example.app1和com.example.app2,只有最后的后缀不同,所以会产生相同的vendor ID
如果用户将属于此Vender的所有App卸载,则idfv的值会被重置,即再重装此Vender的App,idfv的值和之前不同
udid:
UDID的全称是Unique Device Identifier,顾名思义,它就是苹果IOS设备的唯一识别码,它由40个字符的字母和数字组成。
在很多需要限制一台设备一个账号的应用中经常会用到。在iOS5中可以获取到设备的UDID,后来被苹果禁止了。
uuid:
UUID是Universally Unique Identifier的缩写,中文意思是通用唯一识别码。它是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。
这样,每个人都可以建立不与其它人冲突的 UUID。在此情况下,就不需考虑数据库建立时的名称重复问题。苹果公司建议使用UUID为应用生成唯一标识字符串。
开发者可以在应用第一次启动时调用一 次,然后将该串存储起来,替代UDID来使用。但是,如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备。
使用UUID,就要考虑应用被删除后再重新安装时的处理。一个解决的办法是:UUID一般只生成一次,保存在iOS系统里面,如果应用删除了,重装应用之后它的UUID还是一样的,除非系统重置
。但是不能保证在以后的系统升级后还能用(如果系统保存了该信息就能用)
isJailbreaking:
手机是否越狱是根据手机文件目录来实现的,
可以使用XYQuick提供的方法:
[XYSystemInfo sharedInstance].isJailBroken
isDeviceSimulator:
- (BOOL)isDeviceSimulator{
struct utsname systemInfo;
uname(&systemInfo);
NSString *tmpDevStr = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
if ([tmpDevStr isEqualToString:@"x86_64"]
|| [tmpDevStr isEqualToString:@"i386"]
|| [tmpDevStr isEqualToString:@"i586"]) {
return YES;
}
return NO;
}
Wi-FiMac:
通常指Wi-Fi的BSSID
- (NSString *)wifiMac{
NSString *macIp = @"Not Found";
CFArrayRef myArray = CNCopySupportedInterfaces();
if (myArray != nil) {
CFDictionaryRef myDict = CNCopyCurrentNetworkInfo(CFArrayGetValueAtIndex(myArray, 0));
if (myDict != nil) {
NSDictionary *dict = (NSDictionary*)CFBridgingRelease(myDict);
macIp = [dict valueForKey:@"BSSID"];
}
}
if(myArray){
CFRelease(myArray);
}
return macIp;
}
Wi-Fi Name:
Wi-Fi Name通常指Wi-Fi的SSID
- (NSString *)deviceSSID{
NSString *wifiName = nil;
CFArrayRef wifiInterfaces = CNCopySupportedInterfaces(); if (!wifiInterfaces) {
return nil;
} NSArray *interfaces = (__bridge NSArray *)wifiInterfaces; for (NSString *interfaceName in interfaces) {
CFDictionaryRef dictRef = CNCopyCurrentNetworkInfo((__bridge CFStringRef)(interfaceName)); if (dictRef) {
NSDictionary *networkInfo = (__bridge NSDictionary *)dictRef; wifiName = [networkInfo objectForKey:(__bridge NSString *)kCNNetworkInfoKeySSID]; CFRelease(dictRef);
}
} CFRelease(wifiInterfaces);
return wifiName;
}
deviceName:
- (NSString *)deviceName
{
#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
return [UIDevice currentDevice].name;
#else
return @"";
#endif
}
freeDiskSpace:
- (NSString *)freeDiskSpace
{
#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] ;
NSFileManager *fileManager = [[NSFileManager alloc ]init];
NSDictionary *fileSysAttributes = [fileManager attributesOfFileSystemForPath:path error:nil];
NSNumber *totalSpace = [fileSysAttributes objectForKey:NSFileSystemFreeSize];
return [NSString stringWithFormat:@"%.2fG",[totalSpace longLongValue]/1024.0/1024.0/1024.0];
#else
return nil;
#endif
}
totalSpace:
- (NSString *)totalSpace
{
#if (TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR)
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] ;
NSFileManager *fileManager = [[NSFileManager alloc ]init];
NSDictionary *fileSysAttributes = [fileManager attributesOfFileSystemForPath:path error:nil];
NSNumber *totalSpace = [fileSysAttributes objectForKey:NSFileSystemSize];
return [NSString stringWithFormat:@"%.2fG",[totalSpace longLongValue]/1024.0/1024.0/1024.0];
#else
return nil;
#endif
}
关于iOS设备的那些事的更多相关文章
- 怎样将游戏从Unity导到iOS设备上
当我开始开发自己的iOS游戏时,我会考虑的第一件事便是如何将其导出到设备中,如此有效地测试我的游戏.最初,该过程看似很长且复杂,我所遇到的主要问题是,尽管存在许多资源,但是它们并非完全来自同样的地方, ...
- IOS设备 UIDevice 获取操作系统 版本 电量 临近手机触发消息检测 (真机亲测可用)
- (void)viewDidLoad { [super viewDidLoad]; // 操作系统 NSString * osName =[[UIDevice currentDevice]syste ...
- 使用Safari远程调试iOS设备网页
最近在做HTML 5游戏时,发布到手机上访问网页总是莫名其妙出现问题,苦于没有remote debug功能一直没有查找到问题. 这边博客详细介绍了iOS, Android, Windows Phone ...
- 使用Fiddler对Android或者iOS设备进行抓包
1.PC端Fiddler配置 Tools->HTTPS->选中“Decrpt HTTPS traffic”,“Ignore server certificate errors” Tools ...
- 借助91助手,将ibook中的pdf文件拷贝至其它的pdf阅读器中(ios设备无需越狱)
有时候在使用ios自带的ibook阅读pdf文件的时候,会发现ibook有些功能并不是那么方便.最近我就遇到了一例,我想在ibook中放一本比较大的pdf书,页数有几百吧,pdf文件本身每一章节都是有 ...
- iOS设备的尺寸
iOS设备的尺寸有两种统计单位:像素和点,对于程序员来说,只需要记住点即可. 常见的iOS设备的尺寸(点) 分辨率(点) 设备 分辨率(像素) 320*480 4.4s 320*480(4) 640* ...
- 【转】iOS设备的UDID是什么?苹果为什么拒绝获取iOS设备UDID的应用?如何替代UDID?
本文讲诉的主要是为什么苹果2011年8月发布iOS 5后就开始拒绝App获取设备的UDID以及UDID替补方案,特别提醒开发者苹果App Store禁止访问UDID的应用上架(相关推荐:APP被苹果A ...
- 不通过App Store,在iOS设备上直接安装应用程序(转)
今天在iOS设备上安装天翼云存储app,在safari上直接打开http://cloud.189.cn/wap/index.jsp,点击“点击免费安装”,如下图: 神奇的事情发生了,设备上直接下载ap ...
- 关于overflow-y:scroll ios设备不流畅的问题
最近做双创项目的时候因为页面有很多数据显示,所以打算让它Y轴方向滚动条的形式展现,但在测试阶段发现IOS设备滑动效果非常不理想: search by google之后找到解决办法: -webkit-o ...
随机推荐
- vue面试
1.一个比较全的vue面试题 http://www.bslxx.com/p/3187.html
- C#中的var
var关键字是C#3.0开始新增的特性,称为推断类型(其实也就是弱化类型的定义). var a =23: 则a是整型,var a = “lgs”:则a是字符型,但使用Var类型要注意: 1.必须在定义 ...
- (9)进程---JoinableQueue队列
消费者模型-->存和取得过程 和Queue队列区别:解决了Queue队列拿取完,程序阻塞不能自动关闭(依靠放入None来解决)的问题--->参见上个例子 put 存入, get 获取 q. ...
- Spring AOP 理论
一.AOP AOP 产生的背景 “存在即合理”,任何一种理论或技术的产生,必然有它的原因.了解它产生的背景.为了解决的问题有助于我们更好地把握AOP的概念. 软件开发一直在寻求一种高效开发.护展.维护 ...
- Python自学:第二章 删除空白
lstrip:剔除开头空白 strip:剔除两段空白 rstrip:剔除末尾空白 favorite: 最喜欢的 >>>favorite_language = "Python ...
- liunx权限管理之高级权限
高级权限 suid,sgid,sticky ======================================================== 文件权限管理之:高级权限 问题1: 为什么 ...
- stock 基本操作
追涨停 量比 大于5 0%-2% 个股 2点卖 37分钟买 板块5 -8 只涨停 板块分向标 追踪短期个股的涨跌现象 明白市场大级别趋势 主 ...
- hdu-6397-容斥
Character Encoding Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Oth ...
- 兼容IE8的video写法
<video width="100%" height="515px" controls preload> <source src=" ...
- 62. Unique Paths不同路径
网址:https://leetcode.com/problems/unique-paths/ 第一思路是动态规划 通过观察,每一个格子的路线数等于相邻的左方格子的路线数加上上方格子的路线数 于是我们就 ...