每个 运行 上生成的新 UUID
New UUID generated on each run
我的 viewDidLoad
:
中有此代码
let udid = UUID().uuidString
但是每次我 运行 应用程序我都会得到一个新生成的 UUID
。怎么会?
我需要每个用户都使用相同的 ID 才能识别他们,所以我应该将其保存在 UserDefault 中,还是我应该如何在用户重新启动应用程序时唯一地识别用户?
init()
Initializes a new UUID with RFC 4122 version 4 random bytes.
var uuidString: String
Returns a string created from the UUID, such as
“E621E1F8-C36C-495A-93FC-0C247A3E6E5F”
所以每次调用 let udid = UUID().uuidString
时,它都会 returns 新的 UUID。
如果您需要相同的 UUID,只需保存它并在下次需要时阅读。
例如:
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 会在应用程序卸载时被清除。因此,如果您需要在重新安装后访问 if,则可以使用 Keychain 来保存 UUID。此外,您可以使用库,例如 FCUUID
您要执行的操作的工具是 UIDevice.current.identifierForVendor
。这 returns 正是您所描述的 UUID 类型(专用于此目的)。
在应用程序设置中保存生成的 UUID。
卸载时,它会被删除。
这是要走的路!
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") ?? ""
}
}
@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,而不是设备标识符。上面接受的另一个答案将 return 设备标识符。
我的 viewDidLoad
:
let udid = UUID().uuidString
但是每次我 运行 应用程序我都会得到一个新生成的 UUID
。怎么会?
我需要每个用户都使用相同的 ID 才能识别他们,所以我应该将其保存在 UserDefault 中,还是我应该如何在用户重新启动应用程序时唯一地识别用户?
init()
Initializes a new UUID with RFC 4122 version 4 random bytes.
var uuidString: String
Returns a string created from the UUID, such as “E621E1F8-C36C-495A-93FC-0C247A3E6E5F”
所以每次调用 let udid = UUID().uuidString
时,它都会 returns 新的 UUID。
如果您需要相同的 UUID,只需保存它并在下次需要时阅读。
例如:
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 会在应用程序卸载时被清除。因此,如果您需要在重新安装后访问 if,则可以使用 Keychain 来保存 UUID。此外,您可以使用库,例如 FCUUID
您要执行的操作的工具是 UIDevice.current.identifierForVendor
。这 returns 正是您所描述的 UUID 类型(专用于此目的)。
在应用程序设置中保存生成的 UUID。 卸载时,它会被删除。
这是要走的路!
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") ?? ""
}
}
@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,而不是设备标识符。上面接受的另一个答案将 return 设备标识符。