我在哪里可以存储iOS设备令牌供以后使用?
现在我通过didRegisterForRemoteNotificationsWithDeviceToken
获取设备令牌。 但是,我需要在用户登录后在我的应用程序中使用设备令牌。
如何在以后从应用程序的其他地方访问deviceToken,如果我不能,我将如何/在哪里将它存储在didRegisterForRemoteNotificationsWithDeviceToken
以便稍后可以检索它?
最简单的方法是使用NSUserDefaults
保存:
NSUserDefaults * ud = [NSUserDefaults standardUserDefaults]; [ud setObject:myPushToken forKey:@"currentPushToken"]; [ud synchronize];
恢复:
NSString * currentPushToken = [[NSUserDefaults standardUserDefaults] objectForKey:@"currentPushToken"];
最好将keychain
用于此类数据。
将此类func添加到项目中
import UIKit import Security class Keychain { class func save(key: String, data: NSData) -> Bool { let query = [ kSecClass as String : kSecClassGenericPassword as String, kSecAttrAccount as String : key, kSecValueData as String : data ] SecItemDelete(query as CFDictionaryRef) let status: OSStatus = SecItemAdd(query as CFDictionaryRef, nil) return status == noErr } class func load(key: String) -> NSData? { let query = [ kSecClass as String : kSecClassGenericPassword, kSecAttrAccount as String : key, kSecReturnData as String : kCFBooleanTrue, kSecMatchLimit as String : kSecMatchLimitOne ] var dataTypeRef :Unmanaged? let status: OSStatus = SecItemCopyMatching(query, &dataTypeRef) if status == noErr { return (dataTypeRef!.takeRetainedValue() as NSData) } else { return nil } } class func delete(key: String) -> Bool { let query = [ kSecClass as String : kSecClassGenericPassword, kSecAttrAccount as String : key ] let status: OSStatus = SecItemDelete(query as CFDictionaryRef) return status == noErr } class func clear() -> Bool { let query = [ kSecClass as String : kSecClassGenericPassword ] let status: OSStatus = SecItemDelete(query as CFDictionaryRef) return status == noErr } }
你就这样使用它
要存储(传递是你的情况下的字符串,令牌)
if let data = pass.dataUsingEncoding(NSUTF8StringEncoding,allowLossyConversion: false) { let saveSuccess = Keychain.save("Password", data: data) }
加载
data = Keychain.load("Password") var pass =NSString(data: data, encoding: UInt())