我试图将didRegisterForRemoteNotificationsWithDeviceToken
中的令牌发送到服务器。但发送时遇到错误:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Foundation._SwiftNSData)
。对于请求,我使用Alamofire
框架。我的代码:
func signUp(withToken token: Data, completion: (Error) -> Void) {
let parameters: Parameters = ["registration_id": token]
print("token = \(token)")
Alamofire.request(baseUrl + signUpPath, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON(completionHandler: {response in
})
}
Print
告诉我:token = 32 bytes
。有什么建议?在将其发送到服务器之前,我可能需要一些Data
类型的额外步骤吗?
更新
我尝试将令牌转换为NSString
类型但获得nil
let tokenNSString: NSString? = NSString(data: token, encoding: String.Encoding.utf8.rawValue)
print("nsstrgin from token = \(tokenNSString)")
答案 0 :(得分:-1)
您进入项目的deviceToken
appDelegate didRegisterForRemoteNotificationsWithDeviceToken
是NSData
个对象。要从该NSData
对象中提取实际的令牌字符串,请使用以下代码。
let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
var tokenString: String = ""
for i in 0..<deviceToken.length {
tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
}
print("This is My Device Token for Push notification -", tokenString)
现在,tokenString
是您正在寻找的实际令牌。尝试将其与任何密钥一起发送到您的服务器。
BTW我正在使用Xcode 7.3.1和Swift 2.2。请随意根据您的要求进行修改。
谢谢, 希望这有帮助。