【问题标题】:Sending push notifications's token to the server. Alamofire error将推送通知的令牌发送到服务器。 Alamofire 错误
【发布时间】:2016-10-11 07:44:37
【问题描述】:

我正在尝试将我在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)")

【问题讨论】:

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


【解决方案1】:

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

顺便说一句,我正在使用 Xcode 7.3.1 和 Swift 2.2。请随时根据您的要求进行修改。

谢谢, 希望这会有所帮助。

【讨论】:

  • 您想发送令牌字符串,这就是我试图解释该过程的原因。
  • 您也可以将令牌作为 nsdata 发送,应该只是字符串吗?将令牌作为数据发送有什么缺点吗?
  • 是的,您可以作为 NSData 发送,但在这种情况下,您的服务器必须有能力处理它。
  • 你不必担心,现在编辑并给人们正确的答案。
  • 我们在这里互相帮助。不要粗鲁,在否决任何人的答案之前,请深入了解答案将要解释的内容。有几种方法可以使用代码解决问题。每个人都有自己的观点和解决方案。:) 请尝试查看一些这样的链接 - stackoverflow.com/questions/22879445/…
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 2012-06-30
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多