采用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;
}
目录
相关文章
|
2月前
|
存储 Android开发 网络架构
点心云-N1盒子、机顶盒、手机等设备-小白保姆式刷机教程
本文介绍了N1盒子的刷机教程,包括未刷机和已刷其他系统的N1。教程详细列出了所需工具和具体步骤,如下载工具包、制作安装盘、打开ADB模式、降级、刷入新系统等,确保用户能够顺利完成刷机操作。对于已刷第三方系统的N1,还提供了解决USB线不被识别、驱动问题及供电不足等常见问题的方法。
222 1
点心云-N1盒子、机顶盒、手机等设备-小白保姆式刷机教程
|
1月前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
64 1
|
5月前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
4月前
|
存储 前端开发 算法
|
4月前
|
存储 小程序 JavaScript
|
4月前
|
存储 小程序 JavaScript
|
4月前
|
存储 小程序 关系型数据库
原生小程序 获取手机号并进行存储到mysql数据库
原生小程序 获取手机号并进行存储到mysql数据库
|
6月前
|
存储 缓存
使用tp5内cache缓存,存储手机短信验证码
使用tp5内cache缓存,存储手机短信验证码
123 1
|
6月前
|
JavaScript
技术心得:根据不同访问设备跳转到PC页面或手机页面
技术心得:根据不同访问设备跳转到PC页面或手机页面
77 0
|
7月前
|
编解码 测试技术 API
模拟手机设备:使用 Playwright 实现移动端自动化测试
本文介绍了使用Python的Playwright库进行移动设备模拟和自动化测试的方法。通过Playwright,开发者能模拟不同设备的硬件和软件特性,如屏幕尺寸、用户代理,以确保网站在移动设备上的表现。示例代码展示了如何模拟iPhone X并访问网站,之后可在此基础上编写测试代码以检验响应式布局和交互功能。Playwright的设备参数注册表支持多种设备,简化了移动端自动化测试的流程。
下一篇
DataWorks