好的,当用户按下应用程序简介中的按钮时,他们可以注册通知。完成此操作后,我尝试保存 token 以发送到我的服务器,并且它显示为空白:
这是我介绍中的代码。
let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
var myDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
var tokenString: String = myDelegate.tokenString1
tokenString = tokenString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
tokenString = tokenString.stringByReplacingOccurrencesOfString(" ", withString: "")
NSUserDefaults.standardUserDefaults().setObject(tokenString, forKey: "notification")
NSUserDefaults.standardUserDefaults().synchronize()
这是我的应用程序委托(delegate)中的代码:
var tokenString1 = ""
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
var tokenString: String = deviceToken.description
tokenString = tokenString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "<>"))
var tokenString1 = tokenString.stringByReplacingOccurrencesOfString(" ", withString: "")
NSUserDefaults.standardUserDefaults().setObject(tokenString1, forKey: "notification")
NSUserDefaults.standardUserDefaults().synchronize()
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("Failed to register:", error)
}
最佳答案
didRegisterForRemoteNotificationsWithDeviceToken
中的local 变量tokenString1
和instance 变量tokenString1
分别是完全不同的物体。首选局部变量,并且永远不会设置实例变量。
解决方案:去掉didRegister ...
中的关键字var
tokenString1 = tokenString.stringByReplacingOccurrencesOfString(" ", withString: "")
根本不需要将 token 保存在用户默认值中。您始终可以在注册方法中获得实际的值,每次应用程序启动时都会调用该方法。
关于swift - 设备 token 未保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634037/