【Swift3】Swift3でプッシュ通知のデバイストークンを文字列にする
iOSのPUSH通知のDeviceTokenを文字列(NSString / String)に変換するには単純に以下のようにはいきませんでした。
var token: String = NSString(data:deviceToken, encoding:NSUTF8StringEncoding)
なのでSwift2.3までは以下のように受け取ったData
のdescription
を取得して<>と空白を取り除くというアクロバティックな方法を取っていました。
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { var characterSet: NSCharacterSet = NSCharacterSet( charactersInString: "<>" ) var token: String = ( deviceToken.description as NSString ) .stringByTrimmingCharactersInSet( characterSet ) .stringByReplacingOccurrencesOfString( " ", withString: "" ) as String print(token) }
が!Swift3で同じように変換しようとすると32 bytes
という素敵な文字列になってしまいます。description
で帰ってくる文字列が変わったってことですね。そもそも変則的な方法でしたがSwift3では以下の方法でに文字列に変換することができます。
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let token = deviceToken.map { String(format: "%.2hhx", $0) }.joined() print(token) }