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

时间:2016-10-11 07:44:37

标签: ios apple-push-notifications token swift3 alamofire

我试图将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)")

1 个答案:

答案 0 :(得分:-1)

您进入项目的deviceToken appDelegate didRegisterForRemoteNotificationsWithDeviceTokenNSData个对象。要从该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。请随意根据您的要求进行修改。

谢谢, 希望这有帮助。