zoukankan      html  css  js  c++  java
  • 利用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.

  • 相关阅读:
    Apache Ant 1.9.1 版发布
    Apache Subversion 1.8.0rc2 发布
    GNU Gatekeeper 3.3 发布,网关守护管理
    Jekyll 1.0 发布,Ruby 的静态网站生成器
    R语言 3.0.1 源码已经提交到 Github
    SymmetricDS 3.4.0 发布,数据同步和复制
    beego 0.6.0 版本发布,Go 应用框架
    Doxygen 1.8.4 发布,文档生成工具
    SunshineCRM 20130518发布,附带更新说明
    Semplice Linux 4 发布,轻量级发行版
  • 原文地址:https://www.cnblogs.com/wjw-blog/p/14505465.html
Copyright © 2011-2022 走看看