I just updated from Xcode 7 to the 8 GM and amidst the Swift 3 compatibility issues I noticed that my device tokens have stopped working. They now only read '32BYTES'.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { print(deviceToken) // Prints '32BYTES' print(String(data: deviceToken , encoding: .utf8)) // Prints nil }
Before the update I was able to simply send the NSData to my server, but now I'm having a hard time actually parsing the token.
What am I missing here?
Edit: I just testing converting back to NSData and I'm seeing the expected results. So now I'm just confused about the new Data type.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { print(deviceToken) // Prints '32BYTES' print(String(data: deviceToken , encoding: .utf8)) // Prints nil let d = NSData(data: deviceToken) print(d) // Prints my device token }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined() print(token) }
I had the same problem. This is my solution:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { var token = "" for i in 0..<deviceToken.count { token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]]) } print(token) }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With