• IOS 生成设备唯一标识


    前言

    iOS设备5.0以上放弃使用[[UIDevice currentDeviceuniqueIdentifier]来获得设备唯一ID

    iOS设备私有方法禁止用户获取和使用IMEI

     

    需求

    需要一个能够标识设备唯一性的ID

     

    Apple解决方案

    1、使用CFUUIDCreateString(NULLCFUUIDCreate(NULL))生成UUID

    2、将UUID缓存在本地,sqlite或plist。使用时取出

    评价:

    坑爹!这种方式每次UUID生成一次都不一样,如果产品被fuck out of device,再装载会导致两次UUID不一致。这个方案明显适用范围狠窄啊亲。于是乎各路妖魔鬼怪开始了各种解决方案。

     

    方案一:(Mac地址+bundle_id)

    1、获取本地mac地址和应用bundle_id

    2、将mac+bundle_id进行散列运算获得机器+应用的唯一标识

    3、只将mac进行散列运算获得机器的唯一标识

    评价:

    狠好的解决方案,如果没有2B的联通搅局,这个方案可以说完美了,取wifi的mac地址除,非你修机器把wifi换掉。但是亲,中国曾经出过太监版3GS,泥马,这是一种怎样的考量删除了wifi啊。这种拍脑袋的做法就是当局的2B,联通跟着傻B。what the fuck!你说还有其他方案不,不要依赖硬件?

     

    方案二:(推送token+bundle_id)

    1、应用中增加推送用来获取token

    2、获取应用bundle_id

    3、根据token+bundle_id进行散列运算

    评价:

    apple push token保证设备唯一,但必须有网络情况下才能工作,该方法不依赖于设备本身,但依赖于apple push。加上一定的业务逻辑可以解决大部分情景。

     

    方案三:openUDID

    ios7已经被拒绝了,想都别想

     

    什么KeyChain,iCloud都坑爹,不是王道,已经不需要挣扎了。没意义,就用Apple给的方案,删了不能识别就不识别吧。

    if ([[NSUserDefaults standardUserDefaults]objectForKey:@"UUID"]==nil) {

            CFUUIDRef uuid = CFUUIDCreate(NULL);

            CFStringRef uuidstring = CFUUIDCreateString(NULL, uuid);

    // 就下面这个玩意

            NSString *identifierNumber = [NSString stringWithFormat:@"%@",uuidstring];

    // 存起来以后用

            [[NSUserDefaults standardUserDefaultssetObject:identifierNumber forKey:@"UUID"];

            [[NSUserDefaults standardUserDefaultssynchronize];

            CFRelease(uuidstring);

            CFRelease(uuid);

        }

  • 相关阅读:
    CSS margin的一些让你模糊的点
    VUE中CSS样式穿透
    如何给img标签里的请求添加自定义header?
    iframe的父子页面进行简单的相互传值
    Docker部署网站之后映射域名
    机器学习笔记(九)---- 集成学习(ensemble learning)【华为云技术分享】
    鲲鹏性能优化十板斧之前言 | 鲲鹏处理器NUMA简介与性能调优五步法
    【我的物联网成长记8】超速入门AT指令集【华为云技术分享】
    【直播分享】实现LOL小地图英雄头像分析案例【华为云分享】
    MongoDB一次节点宕机引发的思考(源码剖析)【华为云分享】
  • 原文地址:https://www.cnblogs.com/ccguo/p/3506906.html
Copyright © 2020-2023  润新知