ios获取uuid
创始人
2024-12-11 00:38:47

iOS设备UUID获取详解

在iOS开发过程中,获取设备的唯一标识符(UUID)对于实现设备识别、数据追踪、用户分析等功能至关重要。本文将详细讲解如何在iOS中获取UUID,并探讨不同版本iOS系统中获取UUID的方法。

什么是UUID?

UUID(Universally Unique Identifier)即通用唯一识别码,是一个128位的数字标识符。在iOS系统中,UUID通常用于标识设备,便于开发者追踪和分析用户行为。

ios获取uuid

获取UUID的方法

iOS 5.0之前

在iOS 5.0之前,可以通过UIDevice类的uniqueIdentifier属性获取设备的序列号,即UUID。苹果公司为了保护用户隐私,在iOS 5.0之后废弃了该属性。

iOS 5.0 - iOS 6.0

在iOS 5.0到iOS 6.0期间,开发者可以通过以下两种方法获取设备的UUID:

  1. identifierForVendor:该方法返回一个与应用程序相关的唯一标识符,该标识符在相同设备上的相同应用版本中保持不变。

  2. advertisingIdentifier:该方法返回一个与广告相关的唯一标识符,该标识符在用户重置系统后可能会改变。

iOS 7.0及以后

由于苹果公司禁止使用identifierForVendor和advertisingIdentifier,开发者需要采用以下方法获取UUID:

  1. 钥匙串保存:将UUID保存到钥匙串中,并在应用启动时读取该UUID。这样,即使用户重置系统,也能获取到相同的UUID。

Swift实现

以下是一个使用Swift语言获取并保存UUID的示例:

import UIKit
import Security

class UUIDManager {
    static let shared = UUIDManager()

    private var uuid: String?

    init() {
        self.uuid = fetchUUID()
    }

    func fetchUUID() -> String? {
        var error: Unmanaged?
        guard let uuidRef = SecGenerateUUID(&error) else {
            return nil
        }

        return uuidRef as String
    }

    func saveUUID() {
        guard let uuid = self.uuid else {
            return
        }

        KeychainHelper.save(key: "UUID", value: uuid)
    }
}

class KeychainHelper {
    static func save(key: String, value: String) {
        var status: OSStatus
        let data = value.data(using: .utf8)!

        status = SecItemAdd([kSecClass: kSecClassGenericPassword,
                             kSecAttrAccount: key,
                             kSecValueData: data] as CFDictionary, nil)

        if status == noErr {
            print("UUID saved successfully")
        } else {
            print("Error saving UUID to Keychain: \(status)")
        }
    }
}

Objective-C实现

以下是一个使用Objective-C语言获取并保存UUID的示例:

#import 
#import 

@interface UUIDManager : NSObject

+ (NSString *)sharedManager;

@end

@implementation UUIDManager

+ (NSString *)sharedManager {
    static UUIDManager *sharedManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedManager = [[UUIDManager alloc] init];
    });
    return sharedManager;
}

- (NSString *)fetchUUID {
    CFUUIDRef uuidRef;
    uuidRef = CFUUIDCreate(kCFAllocatorDefault);
    if (uuidRef) {
        const char *uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
        NSString *result = [NSString stringWithCString:uuidString encoding:NSUTF8StringEncoding];
        CFRelease(uuidRef);
        return result;
    }
    return nil;
}

- (void)saveUUID {
    NSString *uuidString = [self fetchUUID];
    if (uuidString) {
        [KeychainHelper save:key:uuidString];
    }
}

@end

@interface KeychainHelper : NSObject

+ (void)save:key:uuid;

@end

@implementation KeychainHelper

+ (void)save:key:uuid {
    CFTypeRef value = (CFTypeRef)[uuid UTF8String];
    OSStatus status = SecItemAdd(@{
        kSecClass : kSecClassGenericPassword,
        kSecAttrAccount : key,
        kSecValueData : value
    } as CFDictionary, nil);

    if (status == errSecSuccess) {
        NSLog(@"UUID saved successfully");
    } else {
        NSLog(@"Error saving UUID to Keychain: %d", status);
    }
}

@end

总结

通过本文,我们了解了在iOS中获取UUID的方法,以及如何使用Swift和Objective-C实现UUID的获取和保存。在实际开发中,根据项目需求选择合适的方法,确保获取到稳定的UUID。

相关内容

热门资讯

服贸新观察|首设出海服务展区 ...   新华社北京9月13日电(记者吉宁 张骁)金秋9月,首钢园工业遗存的硬朗线条,与服贸会的璀璨灯光交...
本周末10余家公司披露回购增持... 9月13日晚间,三一重工、天安新材、永茂泰等多家主板公司同步披露股份回购进展,以真金白银的行动践行对...
支付宝惊现假App!1.8元能... 欢迎关注我的好朋友:杠杆游戏!撰文|蜜妹这是@闺蜜财经的第1819篇原创图片来源|AI自动生成支付宝...
两只大牛股,紧急发声:不属实!... 5天3板超声电子:“超声电子高频板通过英伟达认证”情况不属实,目前无产品供货给英伟达9月13日晚间,...
英企悔不当初!当初叫嚣“绝不与... 航空发动机是飞机的“心脏”,全世界能完全自主研制航空发动机的国家,掰着一只手都数得过来。中国过去在这...