采用SAMKeychain钥匙串存储设备唯一标示与何种情况下同一个手机它存储的值会变化

简介: 采用SAMKeychain钥匙串存储设备唯一标示与何种情况下同一个手机它存储的值会变化

相信很多应用都会跟踪并识别设备,如何识别一台手机呢?

1.uid是唯一标识别,它是唯一硬件标示,全球不会重复;

2.你的app若开启了广告标示符选项也可以使用广告标示符号。从idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];来看它好像是UUID,那么只要是uuid那么就有可能在抹除操作系统是变更,不清楚苹果怎么生成的UUID那么也不能完全肯定。在苹果商店提交app都提示若没有设置开启广告标识符但是使用了广告标识符号查出来后会永久封研发者证书和账号。 若app开启了广告标识符但是没有投放广告讲会被拒绝。

3.使用SAMKeychain钥匙串存储设备唯一标示(本质是UUID)。

UUID的优势将更加明显。根据使用的特定机制,UUID不仅需要保证是彼此不相同的,或者最少也是与公元3400年之前其他任何生成的通用唯一标识符有非常大的区别。UUID最少在3000+年内不会重复。

大家知道uuid获取一次就会变化一次。那么如何把它当作设备的唯一标识符呢?

获取UUID判断是:首先判断本地是否存存UUID,若获取不到就通过SAMKeychain读区系统中存储的UUID,若仍旧读区不到就生成UUID,存到本地和钥匙串中。因为是存入系统中,所以删除应用再安装应用读出的设备标示不变。

那同一设备何时获取的设备标示会变呢?系统抹除。

苹果系统抹除是十分罕见的事情,正式版本的系统不允许系统回退,以下是系统抹除的情况:

1:用户的手机有问题需要苹果营业部人员返厂维修的,会抹除系统(这个我遇到过);

2:用户自己升级失败,通过iTunes和电脑抹除系统重新安装系统的(就是你手机升级失败变成板砖了,你把它抹除了操作系统,重新安装了系统。这个我遇到过)。

幸亏苹果没有克隆手机的操作系统到另一个手机(黑技术,偷用户系统数据快捷方式)。让安卓用户为克隆手机操作系统发愁去吧!

部分代码如下:

//获取设备唯一标示符
+ (NSString *)UUID;
{
    
    NSString *deviceUUId = [[NSUserDefaults standardUserDefaults] objectForKey:@"uuid"];
    //        NSLog(@"str = %@",str);
    if (deviceUUId){
        return deviceUUId;
    }
    else
    {
        NSString *deviceUUId = [UICKeyChainStore stringForKey:@"uuid" service:@"com.test.taxi"];
        
        if (deviceUUId) {
            //            [[NSUserDefaults standardUserDefaults] setObject:deviceUUId forKey:@"uuid"];
            [BITMobilePassword setUserDefaultsValue:deviceUUId key:@"uuid"];
            return deviceUUId;
        }
        else {
            CFUUIDRef puuid = CFUUIDCreate( nil );
            CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
            NSString * result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
            CFRelease(puuid);
            CFRelease(uuidString);
            UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"BitInfo.Pods"];
            NSString *deviceUUID = [result md5String];
            
            [store setString:deviceUUID forKey:@"uuid"];
            //            [[NSUserDefaults standardUserDefaults] setObject:deviceUUId forKey:@"uuid"];
            [BITMobilePassword setUserDefaultsValue:deviceUUId key:@"uuid"];
            //        [store synchronizable];
            NSLog(@"store = %@ str = %@",store,deviceUUId);
            return deviceUUID;
            
        }
    }
    
    return nil;
}
目录
相关文章
|
1月前
|
编解码 测试技术 API
模拟手机设备:使用 Playwright 实现移动端自动化测试
本文介绍了使用Python的Playwright库进行移动设备模拟和自动化测试的方法。通过Playwright,开发者能模拟不同设备的硬件和软件特性,如屏幕尺寸、用户代理,以确保网站在移动设备上的表现。示例代码展示了如何模拟iPhone X并访问网站,之后可在此基础上编写测试代码以检验响应式布局和交互功能。Playwright的设备参数注册表支持多种设备,简化了移动端自动化测试的流程。
49 1
|
1月前
|
Web App开发 Linux Android开发
Chrome谷歌浏览器的WeChat微信模拟器,既可以设置模拟很多型号的手机设备Mozilla
Chrome谷歌浏览器的WeChat微信模拟器,既可以设置模拟很多型号的手机设备Mozilla
|
1月前
|
存储 数据库 Android开发
Android实现手机内存存储功能
Android实现手机内存存储功能
33 2
|
1月前
|
存储
小米获取 版本22 手机存储权限拿不到
小米获取 版本22 手机存储权限拿不到
78 0
|
1月前
|
存储 移动开发 JavaScript
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
【原生】sd.js帮助您简化繁重的获取数据、存储数据(CRUD)骚操作(吐槽~在安卓9.0以下或者IOS10.X以下手机端H5页面不支持,在这两种情况下的系统只能使用ajax或者原生js请求后台数据)
|
10月前
训练自己的图像分类模型部署在手机设备
训练自己的图像分类模型部署在手机设备
|
10月前
|
前端开发 容器
CSS不同手机型号各种尺寸设备宽高比
CSS不同手机型号各种尺寸设备宽高比
|
机器学习/深度学习 存储 人工智能
【OpenVI-视觉评价系列之MOS评价实战篇】手机存储不够用,清理照片太痛苦?MOS评价帮你挑选“垃圾”照片
MOS(Mean Opinion Score)是一种常用的主观质量评价方法,常用于视频、图像等多媒体领域中的质量评价。MOS视觉评价通常是通过让受试者观看视频/图像,对视频的清晰度、锐度、颜色饱和度、运动模糊、噪声等方面进行评价。然而,MOS视觉评价也存在一些局限,例如需要大量的受试者,评估时间较长等。因此,近年来,研究者们也开始探索使用客观评价方法来替代或补充MOS视觉评价。
370 2
【OpenVI-视觉评价系列之MOS评价实战篇】手机存储不够用,清理照片太痛苦?MOS评价帮你挑选“垃圾”照片
|
存储 安全 数据安全/隐私保护
iMazing 2024最新版手机设备管理器
iMazing 2最新版它可以完美地在 iOS 设备之间传输数据。 该软件专门设计用于为用户提供对 iPhone、iPod 和 iPad 的更多控制和管理能力。 它将所有这些高价值设备变成了外部存储,
76 0
|
存储 算法
照片在手机里面是如何存储的?底层原理是什么?
照片在手机里面是如何存储的?底层原理是什么?
526 0