您需要使用鑰匙串:(爲了能夠匹配JNKeychain,您需要在您的pod文件pod 'JNKeychain'
中輸入一個新字符串)。這將保證,如果你不改變你的包標識符,你將永遠有一個uniq設備ID(即使在刪除你的應用程序後也會保持不變)。我曾經在用戶被永久禁止在我們的應用程序中使用過,即使在刪除應用程序後,即使使用不同的帳戶,他也無法進入該應用程序。
import UIKit
import JNKeychain
class KeychainManager: NSObject {
static let sharedInstance = KeychainManager()
func getDeviceIdentifierFromKeychain() -> String {
// try to get value from keychain
var deviceUDID = self.keychain_valueForKey("keychainDeviceUDID") as? String
if deviceUDID == nil {
deviceUDID = UIDevice.current.identifierForVendor!.uuidString
// save new value in keychain
self.keychain_setObject(deviceUDID! as AnyObject, forKey: "keychainDeviceUDID")
}
return deviceUDID!
}
// MARK: - Keychain
func keychain_setObject(_ object: AnyObject, forKey: String) {
let result = JNKeychain.saveValue(object, forKey: forKey)
if !result {
print("keychain saving: smth went wrong")
}
}
func keychain_deleteObjectForKey(_ key: String) -> Bool {
let result = JNKeychain.deleteValue(forKey: key)
return result
}
func keychain_valueForKey(_ key: String) -> AnyObject? {
let value = JNKeychain.loadValue(forKey: key)
return value as AnyObject?
}
}
這是'identifierForVendor'的預期行爲。它是*不是*終身獨特的設備標識符。您可以將自己的價值存儲在鑰匙串中,但您也應該爲用戶提供一個設施來刪除過時的設備;他們可能會因升級或保修更換而更換手機,或者直接擦除設備,這會清除鑰匙扣 – Paulw11
Thanks @ Paulw11。如果用戶在兩臺設備上使用相同的iCloud帳戶。這兩個設備在鑰匙串中是否有相同的設備ID(唯一ID)? – xmhafiz
您可以選擇是否將鑰匙串項目添加到iCloud鑰匙串中,或者將它保存在設備的本地 – Paulw11