创建一个会话UUID Swift

时间:2017-02-14 04:01:38

标签: ios swift

我想创建一个与我的iOS应用每次启动相关联的唯一标识符。我正在考虑做类似的事情:

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

    var window: UIWindow?
    var uuid: String?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    return true
}

func applicationDidBecomeActive(_ application: UIApplication) {

    self.uuid = UUID().uuidString
}

然后每当我想在我的应用程序中使用它时,我会这样做:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        AppDelegate.uuid
    }
}

除了App Delegate之外,是否有更好的地方放置此会话uuid?

2 个答案:

答案 0 :(得分:1)

你不应该使用AppDelegate作为保存属性等的东西。你也应该尽可能地避免单身。

这种东西有2个不错的选择:

1:Use iOS Keychain,这是相当高级的,但是在GitHub上有许多好的包装器和MIT-License。我还没有检查过任何一个Swift。

2:简单的方法,使用NSUserDefault

UserDefaults.standard.setValue(token, forKey: "user_auth_token")
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)")

Example Taken from here:

<强>旁注:

请记住在AppDelegate方法中每次启动应用程序时清除/删除密钥。如果要清除UUID。或者你可以简单地覆盖它而不用清理它。

另外,正如下面@DaveWeston的评论中提到的,如果你要反复多次访问这个密钥,最好将它保存在内存中,但仅为此目的创建一个单例,并不干净按照我的口味,如果你已经有人使用它。

更新:关于NSUserDefaults的内存和不良做法的评论。

让我们转到Apple Documentation并阅读它所说的内容:

  

在运行时,您使用NSUserDefaults对象来读取默认值   您的应用程序使用用户的默认数据库。的 NSUserDefaults的   缓存信息以避免必须打开用户的默认值   数据库每次需要默认值。 synchronize()方法,   它会定期自动调用,会保留   内存缓存与用户的默认数据库同步。

此外,NSUserDefaults实际上是一个单身人士。

答案 1 :(得分:0)

如果你真的在寻找一个非持久化的解决方案,那个应用程序每次迭代的解决方案都不同,我可能会选择UUID(或String)上的类别:

extension UUID {
    public static let sessionUUID : String = UUID().description
}

将其用作UUID.sessionUUID