每次运行时生成新的UUID

时间:2017-06-20 14:07:41

标签: swift uuid

我在viewDidLoad

中有这段代码
let udid = UUID().uuidString

但是每次运行应用程序时,我都会得到一个新生成的UUID。怎么样?

我需要为每个用户提供相同的ID才能识别它们,所以我应该将其保存在UserDefault中,或者即使用户重新启动应用程序,我该如何唯一地识别用户?

5 个答案:

答案 0 :(得分:1)

您尝试做的工具是UIDevice.current.identifierForVendor。这将返回您正在描述的UUID类型(并且用于此目的)。

答案 1 :(得分:0)

根据UUID documentation:

  

init()使用RFC 4122版本4随机字节初始化新的UUID。

     

var uuidString: String   返回从UUID创建的字符串,例如   “E621E1F8-C36C-495A-93FC-0C247A3E6E5F”

因此,每当您调用let udid = UUID().uuidString时,它都会返回新的UUID。 如果您需要具有相同的UUID,只需保存并在下次需要时阅读。 E.g:

UserDefaults.standard.set(udid, forKey: "MY_UUID")

下次检查UserDefaults的值并根据需要创建一个:

if let udid = UserDefaults.standard.value(forKey: "MY_UUID") as? String, !udid.isEmpty {
     // Use it...
} else {
    let udid = UUID().uuidString
    UserDefaults.standard.set(udid, forKey: "MY_UUID")
}

但是,请注意,在卸载应用程序时会清除UserDefaults。因此,如果您需要在重新安装后有权访问,则可以使用Keychain来保存UUID。此外,您可以使用lib,例如FCUUID

答案 2 :(得分:0)

将生成的UUID保存在应用程序设置中。 卸载时,它将被删除。

答案 3 :(得分:0)

这是要走的路!

func getUUID() -> String {
    let userDefaults = UserDefaults.standard
    
    if (userDefaults.string(forKey: "uuid") ?? "").isEmpty == true {
        userDefaults.set(UUID().uuidString,forKey: "uuid")
        userDefaults.synchronize()
        return userDefaults.string(forKey: "uuid") ?? ""
    } else {
        return userDefaults.string(forKey: "uuid") ?? ""

    }
}

答案 4 :(得分:0)

@State private var uuid: String = {
    UserDefaults.standard.register(defaults: ["uuid" : UUID().uuidString])
    return UserDefaults.standard.string(forKey: "uuid") ?? ""
}()
{
    didSet {UserDefaults.standard.set(uuid, forKey: "uuid")}
}

上面的代码将帮助您在 SwiftUI 中执行此操作。它检查字符串是否已经注册。如果没有,它会为其分配一个 UUID。除非删除并重新安装应用,否则 UUID 将保持不变。

这会生成一个随机 UUID,而不是设备标识符。上面接受的另一个答案将返回设备标识符。