每个 运行 上生成的新 UUID

New UUID generated on each run

我的 viewDidLoad:

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

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

我需要每个用户都使用相同的 ID 才能识别他们,所以我应该将其保存在 UserDefault 中,还是我应该如何在用户重新启动应用程序时唯一地识别用户?

根据UUID documentation:

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 设备标识符。