ios - 在 iOS 7 中始终获得唯一的设备 ID

标签 ios iphone objective-c uniqueidentifier

我们的 iOS 应用程序适用于特定用户。因此,我们使用设备唯一标识符来识别用户。这种方法在 iOS 6 之前工作正常,因为我们每次都得到相同的值

NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];

在 iOS 7 中,上述方法返回不同的值,我们在用户识别方面遇到了问题。 iOS 7 提供了以下替代

NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];

我们将 uniqueIdentifier 替换为 identifierForVendor,并创建了一个 Ad-hoc 构建。然后我们在 iOS 7 和 iOS 6 设备上安装构建。到目前为止,在 iOS 7 中,我们每次都得到相同的值,但 iOS 6 每次我们删除并重新安装应用程序时都会得到不同的值

最佳答案

使用这个小助手方法在应用程序的安装/删除 session 之间将标识符保存在钥匙串(keychain)中

-(NSString *)getUniqueDeviceIdentifierAsString
{
    NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];

    NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
    if (strApplicationUUID == nil)
    {
        strApplicationUUID  = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        [SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
    }

    return strApplicationUUID;
}

添加SSKeychain库到您的项目,例如通过带有 pod 'SSKeychain'

的 Cocoapods

关于ios - 在 iOS 7 中始终获得唯一的设备 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19606773/

相关文章:

ios - swift 在 View Controller 之间进行委托(delegate)

iphone - 如何对 JSON 项目进行排序/分组

ios - 如何知道 View Controller 是否将呈现为弹出窗口或模式?

Objective-C 真/假与真/假

iphone - AutoLayout 为多个 View 设置相同的高度和顶部空间,而不是垂直分布

objective-c - AppDelegate、rootViewController 和 presentViewController

ios - 如何在 iOS 9 中使用 Apple maps on objective-c?

ios - 奇怪的行为 : save video recorded within app?

iphone - 新的 iOS 7 状态栏在 Xcode 5 中编译的应用程序中保留了 20px 的范围

ios - 当应用程序未运行(即完全终止)时,如何在用户点击推送通知时打开特定 Controller Objective-C