我在哪里可以存储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())