我在viewDidLoad
:
let udid = UUID().uuidString
但是每次运行应用程序时,我都会得到一个新生成的UUID
。怎么样?
我需要为每个用户提供相同的ID才能识别它们,所以我应该将其保存在UserDefault中,或者即使用户重新启动应用程序,我该如何唯一地识别用户?
答案 0 :(得分:1)
您尝试做的工具是UIDevice.current.identifierForVendor
。这将返回您正在描述的UUID类型(并且用于此目的)。
答案 1 :(得分:0)
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,而不是设备标识符。上面接受的另一个答案将返回设备标识符。