app登录唯一标识 ios
2015-04-29 17:09:20 zhanglinxu 阅读数 93

uuid,如果用户删除该应用再次安装时,又会生成新的字符串,所以不能保证唯一识别该设备



CFUUID从iOS2.0开始,CFUUID就已经出现了。它是CoreFoundatio包的一部分,因此API属于C语言风格。CFUUIDCreate 方法用来创建CFUUIDRef,并且可以获得一个相应的NSString,如下代码:

CFUUIDRef cfuuid =CFUUIDCreate(kCFAllocatorDefault); 

NSString *cfuuidString =(NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
复制代码

获得的这个CFUUID值系统并没有存储。每次调用CFUUIDCreate,系统都会返回一个新的唯一标示符。如果你希望存储这个标示符,那么需要自己将其存储到NSUserDefaults, Keychain, Pasteboard或其它地方。

示例: 68753A44-4D6F-1226-9C60-0050E4C00067

NSUUIDNSUUID在iOS 6中才出现,这跟CFUUID几乎完全一样,只不过它是Objective-C接口。+ (id)UUID 是一个类方法,调用该方法可以获得一个UUID。通过下面的代码可以获得一个UUID字符串:

NSString *uuid =[[NSUUID UUID] UUIDString];
复制代码

跟CFUUID一样,这个值系统也不会存储,每次调用的时候都会获得一个新的唯一标示符。如果要存储的话,你需要自己存储。在我读取NSUUID时,注意到获取到的这个值跟CFUUID完全一样(不过也可能不一样):

示例: 68753A44-4D6F-1226-9C60-0050E4C00067




广告标示符(IDFA-identifierForIdentifier)这是iOS 6中另外一个新的方法,advertisingIdentifier 是新框架AdSupport.framework的一部分。ASIdentifierManager单例提供了一个方法advertisingIdentifier,通过调用该方法会返回一个上面提到的NSUUID实例。

NSString *adId =[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
复制代码

跟CFUUID和NSUUID不一样,广告标示符是由系统存储着的。不过即使这是由系统
存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 
还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 
-> 还原广告标示符) 
,那么广告标示符也会重新生成。关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广
告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。之所以会这样,我猜测是由于
ASIdentifierManager是一个单例



   OpenUDID 开源的一个UDID替代方案,原理是利用应用间的剪贴板共享和本地一些必要的缓存信息,让多个应用间共享一个UUID。(当然像使用友盟这些已经有自己UDID生成方案的可以放弃选择用这个)
    引()
    iOS7中,不同组的应用(即不同厂商)的应用之间不再能共享剪贴板间的数据!
同组(即同一厂商)应用的定义为:Info.plist中关于软件唯一标示符的字段CFBundleIdentifier中的前两段标识符(例如com.mycompany)相同。固在iOS7中,OpenUDID也将慢慢失去它的意义。

2018-12-07 13:38:39 Felicity294250051 阅读数 201

 

问题

现有 UDID UUID IDFA 等方式都存在诸多问题(自行 Google 解惑),选择 IDFV 是一个很好的方式,但它也有一些不足:唯一性 + 持久性 无法满足

identifierForVendor 是 apple 给供应商唯一的一个值,也就是说同一个公司发行的 App 在相同的设备上运行的时候会有这个相同的标识符(不满足唯一性)。如果用户删除了这个供应商的所有 App 然后再重新安装的话,这个标识符就会不一致(不满足持久性)。

 

思路

appName + bundleID + 第一次安装 App 时的 uuidString 来作为 App 的唯一标识(满足唯一性),并依靠 keychain 进行存留(满足持久性)。

 

环境

Swift 4.1

 

准备材料

https://github.com/soffes/SAMKeychain

用这个库操作 keychain 十分方便

 

实现

/// 获取app唯一标识(uuid+keychain 生成设备唯一标识)
///
/// - Returns: <#return value description#>
class func getUUID() -> String {
    let service = Bundle.main.object(forInfoDictionaryKey: String(kCFBundleNameKey)) as? String ?? "" // app名称
    let account = Bundle.main.object(forInfoDictionaryKey: String(kCFBundleIdentifierKey)) as? String ?? "" // bundleID
    var optionUUID = SAMKeychain.password(forService: service, account: account) ?? ""
    if optionUUID.count > 0 {
        print("是否第一次安装:false,app唯一标识:\(optionUUID)")
        return optionUUID
    } else {
        optionUUID = UIDevice.current.identifierForVendor?.uuidString ?? ""
        let query = SAMKeychainQuery()
        query.service = service
        query.account = account
        query.password = optionUUID
        query.synchronizationMode = .no
        do {
            try query.save()
            print("------ save uuid to keychain succeed!!! ------")
        } catch {
            print("------ save uuid to keychain failed!!! ------")
        }
        print("是否第一次安装:true,app唯一标识:\(optionUUID)")
        return optionUUID
    }
}

 

2015-07-30 11:22:41 sjl_leaf 阅读数 584

需要使用头文件

#import <CommonCrypto/CommonDigest.h>

-(NSString*) getDeviceID
{
    NSString * uId = [[UIDevice currentDevice].identifierForVendor UUIDString];
    const char *cStr = [uId UTF8String];
    if (cStr == NULL) {
        cStr = "";
    }
    unsigned char r[ CC_MD5_DIGEST_LENGTH ];
    CC_MD5(cStr,(CC_LONG)strLen([[NSString alloc] initWithUTF8String:cStr]),r);
    NSString *md5DeviceId = [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",r[0], r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8], r[9], r[10], r[11], r[12], r[13], r[14], r[15]];
    return md5DeviceId;
}
2013-05-06 11:51:00 weixin_34195364 阅读数 2

[UIDevice currentDevice] uniqueIdentifier];  UUID苹果己经禁用

//新的UUID生成,随机生成,用于唯一标识,需要保存

 

-(NSString*) uuid {

    CFUUIDRef puuid = CFUUIDCreatekCFAllocatorSystemDefault );

    CFStringRef uuidString = CFUUIDCreateStringnil, puuid );

    NSString * result = (NSString *)CFStringCreateCopyNULL, uuidString);

    CFRelease(puuid);

    CFRelease(uuidString);

    return [result autorelease];

}

 

//UUID,ios6.0后支持,随机生成,用于唯一标识,需要保存

[[UIDevice currentDeviceidentifierForVendor]

AdSupport.framework 

[[ASIdentifierManager sharedManageradvertisingIdentifier]; 不在设置里修改限制广告跟踪时,唯

ODIN1

通过MAC地址生成的唯一标识

http://code.google.com/p/odinmobile/

转载于:https://www.cnblogs.com/kiss007/archive/2013/05/06/3062534.html

2013-09-30 10:49:42 forwardto9 阅读数 1815

以下是取得设备连接的当前WIFI名称.  

#import <SystemConfiguration/CaptiveNetwork.h>  

NSArray *names = (__bridgeNSArray*)CNCopySupportedInterfaces();

    NSDictionary *info = nil;

    for (NSString *name in names) {

        info = (__bridgeNSDictionary*)CNCopyCurrentNetworkInfo((__bridgeCFStringRef)name);

        if (info && [info count]) {

            break;

        }

    }

    NSString *ssid = [[infoobjectForKey:(__bridgeNSString*)kCNNetworkInfoKeySSID] lowercaseString];

    NSLog(@"ssid%@",ssid);

    

iOS获取唯一标识

阅读数 125

ios 设备唯一标识

阅读数 644

ios用户唯一标识

阅读数 0

iOS 获取唯一标识

阅读数 34

没有更多推荐了,返回首页