iOS开发-基础:获取设备UUID,并使用keychain存储

本文介绍了一种在iOS应用中使用UUID作为设备唯一标识的方法,并通过Keychain存储确保即使应用卸载重装,UUID仍保持一致。适用于需要长期跟踪设备的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自: http://blog.sina.com.cn/s/blog_5971cdd00102vqgy.html

简介:

UDID被弃用,使用UUID来作为设备的唯一标识。获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了。使用keychain存储可以保证程序卸载重装时,UUID不变。但当刷机或者升级系统后,UUID还是会改变的。但这仍是目前为止最佳的解决办法了,如果有更好的解决办法,欢迎留言。

(我整理的解决办法的参考来源:http://blog.k-res.net/archives/1081.html)
给大家两个类:

UUID.h中的代码:
<pre name="code" class="objc">#import <Foundation/Foundation.h>

@interface UUID : NSObject

+(NSString *)getUUID;

@end

 
 UUID.m中的代码:
 

#import "UUID.h"
#import <Foundation/Foundation.h>
#import "KeychainItemWrapper.h"


@implementation UUID

+(NSString *)getUUID
{
    KeychainItemWrapper *keychainItem = [[KeychainItemWrapper alloc]
                                        
                                    initWithIdentifier:@"UUID"
                                       
                                                                                 accessGroup:@"YOUR_BUNDLE_SEED.com.yourcompany.userinfo"];

   
    NSString *strUUID = [keychainItem objectForKey:(id)CFBridgingRelease(kSecValueData)];

    //首次执行该方法时,uuid为空
    if ([strUUID isEqualToString:@""])

    {
        CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);

        strUUID = (NSString *)CFBridgingRelease(CFUUIDCreateString (kCFAllocatorDefault,uuidRef));

        [keychainItem setObject:strUUID forKey:(id)CFBridgingRelease(kSecValueData)];
  
    }
    return strUUID;
}

@end

第二个类是苹果官方的一个Demo里封装的,Demo的下载地址:

http://developer.apple.com/library/ios/#samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_h.html#//apple_ref/doc/uid/DTS40007797-Classes_KeychainItemWrapper_h-DontLinkElementID_9



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值