将推送通知的令牌发送到服务器。 Alamofire错误

问题描述:

我试图将我在didRegisterForRemoteNotificationsWithDeviceToken中获得的令牌发送到服务器。但发送时出现错误:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (Foundation._SwiftNSData)。对于请求我使用Alamofire框架。我的代码:将推送通知的令牌发送到服务器。 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类型的其他步骤?

UPDATE

我试图令牌转换为NSString型,但得到nil

let tokenNSString: NSString? = NSString(data: token, encoding: String.Encoding.utf8.rawValue) 
print("nsstrgin from token = \(tokenNSString)") 
+1

你可以将NSData转换为字符串并发送给服务器(http://*.com/questions/4994302/didregisterforremotenotificationswithdevicetoken-doesnt-invoke-on-calling-regi)。如果你想把它作为数据发送到服务器,请尝试multipartform上传(http://*.com/questions/26121827/uploading-file-with-parameters-using-alamofire)。 – vishnuvarthan

+0

@vishnuvarthan请参阅我的更新。 – RomanHouse

+0

用此转换成字符串。 http://*.com/questions/9372815/how-can-i-convert-my-device-token-nsdata-into-an-nsstring – vishnuvarthan

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是您正在寻找的实际令牌。尝试将其与任何密钥一起发送到您的服务器。

顺便说一句我在Swift 2.2中使用Xcode 7.3.1。请随意根据您的要求修改此内容。

谢谢, 希望这有助于。

+0

为什么发送NSData对象不正确? – vishnuvarthan

+0

你想发送令牌字符串,这就是为什么我试图解释过程。 – Tuhin

+0

您也可以将您的令牌作为nsdata发送,如果它只是字符串?,是否存在将令牌作为数据发送的缺点? – vishnuvarthan