为了账号安全,请及时绑定邮箱和手机立即绑定

iOS唯一用户标识符

iOS唯一用户标识符

慕仙森 2019-08-29 16:40:42
iOS唯一用户标识符我正在写一个iphone应用程序,它使用REST与我的服务器通信。主要问题是,我需要以某种方式识别用户。不久前,我们被允许使用UDID,但现在不再允许了。那我应该用什么呢?我需要在iphone上使用某种标识符,因此用户将删除应用程序,再次安装它,并且他将获得相同的ID。
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

首先,UDID 在iOS 5中被弃用。这并不意味着它已经消失了。

其次,你应该问自己是否真的需要这样的东西。如果用户获得新设备并在其上安装您的应用程序该怎么办?相同的用户,但UDID已更改。同时,原始用户可能已经售出了他的旧设备,所以现在一个全新的用户安装你的应用程序,你认为它是基于UDID的不同的人。

如果您不需要UDID,请使用CFUUIDCreate()创建唯一ID并在首次启动时CFUUIDCreateString()将其保护为用户默认值(用于首先将UUID转换为字符串)。它将在备份和恢复后继续存在,甚至在原始用户切换到新设备时也会出现。它在很多方面都是UDID的更好选择。

如果你真的需要一个唯一的设备标识符(听起来不像你那样),请按照Suhail的回答中的指示寻找MAC地址。


查看完整回答
反对 回复 2019-08-29
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

我正在更新我的应用程序,该应用程序仅基于支持iOS 4.3及更高版本的 Unique Identifier工作所以,

1)我无法使用,[UIDevice currentDevice].uniqueIdentifier;因为它已不再可用

2)我无法使用,[UIDevice currentDevice].identifierForVendor.UUIDString因为它仅在iOS 6.0及更高版本中可用,并且无法用于较低的iOS版本。

3)mac地址不是一个选项,因为它在iOS-7中是不允许的

4)OpenUDID不久前已被弃用,并且还存在iOS-6问题。

5)iOS-5及以下版本也没有广告标识符

最后这就是我所做的

a)将SFHFKeychainUtils添加到项目中

b)生成的CFUUID密钥字符串

 CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
    udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));

c)将其保存到Key Chain Utils ,否则它将生成一个新的Unique Every Time

最终守则

+ (NSString *)GetDeviceID {
    NSString *udidString;
   udidString = [self objectForKey:@"deviceID"];
    if(!udidString)
    {
    CFUUIDRef cfuuid = CFUUIDCreate(kCFAllocatorDefault);
    udidString = (NSString*)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, cfuuid));
    CFRelease(cfuuid);
        [self setObject:udidString forKey:@"deviceID"];
    }
    return udidString;}+(void) setObject:(NSString*) object forKey:(NSString*) key{
    NSString *objectString = object;
    NSError *error = nil;
    [SFHFKeychainUtils storeUsername:key
                         andPassword:objectString
                      forServiceName:@"LIB"
                      updateExisting:YES
                               error:&error];

    if(error)
        NSLog(@"%@", [error localizedDescription]);}+(NSString*) objectForKey:(NSString*) key{
    NSError *error = nil;
    NSString *object = [SFHFKeychainUtils getPasswordForUsername:key
                                                  andServiceName:@"LIB"
                                                           error:&error];
    if(error)
        NSLog(@"%@", [error localizedDescription]);

    return object;}

详情请联系我们


查看完整回答
反对 回复 2019-08-29
  • 3 回答
  • 0 关注
  • 626 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信