• 利用SAMKeyChain生成唯一设备号


    1、背景

    由于传统已知的三种方法获取uuid都不能保证它唯一不变,那么我们可以利用钥匙串服务,来生成并存储一个唯一不变的字符,作为唯一的设备id.

    /** 利用CFUUIDCreateString函数生产UUID, 卸载应用重新安装后会不一致*/
    + (NSString *)getUUID{
        CFUUIDRef uuid = CFUUIDCreate(NULL);
        NSString *UUID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
        CFRelease(uuid);
        return UUID;
    }
     
    /**  卸载应用重新安装后会不一致*/
    + (NSString *)getUUID{
        return [UIDevice currentDevice].identifierForVendor.UUIDString;;
    }
     
    /** 不会因为应用卸载改变 
      * 但是用户在设置-隐私-广告里面限制广告跟踪后会变成@"00000000-0000-0000-0000-000000000000"
      * 重新打开后会变成另一个,还原广告标识符也会变
      */
    + (NSString *)getUUID{
        return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    }
    

    2、利用SAMKeyChain生成并保存唯一设备号

    /*利用SAMKeyChain生成并保存唯一设备号*/
    - (NSString *)getDeviceNumber {
        // 首先获取钥匙串中的设备号
        NSString *deviceNumber = [SAMKeychain passwordForService:kKeyChainService account:kKeyChainAccount];
        if (0 == deviceNumber.length) {
            // 获取设别id
            deviceNumber = [[UIDevice currentDevice] identifierForVendor].UUIDString;
            // 将-去掉
            deviceNumber = [deviceNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
            [SAMKeychain setPassword:deviceNumber forService:kKeyChainService account:kKeyChainAccount];
        }
        return deviceNumber;
    }
    
    /*使用的时候*/
        NSString *deviceNumber = [self getDeviceNumber];
        NSLog(@"deviceNumber: %@", deviceNumber);
    

    3、注意事项

    假设我们的APP 有普通版:appNormal,收费版:appPro,可能会使用不用的bundleID:com.wjw.appNormal、com.wjw.appPro作为区分生成设备id,两套代码里 “kKeyChainService”,“kKeyChainAccount”里如果都一样,若已经安装了appNormal,后安装的appPro里就能取到之前生成的设备id。如果先安装的app删除,再安装新app,新app就会生成新的设备id.

  • 相关阅读:
    @ModelAttribute注解详细使用
    Spring MVC使用注解实现账户注册与登陆
    @PathVariable、@RequestHeader与@CookieValue注解的使用案例
    IDEA搭建我的第一个Spring MVC应用(附使用注解实现)
    JDBC自定义工具类
    JDBC与MySQL实现分页查询技术
    JavaWeb实战——记录网站上一次访问时间
    微信小程序使用setData修改数组中的指定下标的属性值
    Centos6.x 无法 ping 外网 --- 已解决
    Ckeditor失去焦点前保留光标位置
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/14505465.html
Copyright © 2020-2023  润新知