将推送通知的令牌发送到服务器。 Alamofire 错误
Posted
技术标签:
【中文标题】将推送通知的令牌发送到服务器。 Alamofire 错误【英文标题】:Sending push notifications's token to the server. Alamofire error 【发布时间】: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)")
【问题讨论】:
您可以将 NSData 转换为 String 并将其发送到服务器(***.com/questions/4994302/…)。如果您想将其作为数据发送到服务器,请尝试多部分上传(***.com/questions/26121827/…)。 @vishnuvarthan 请看我的更新。 用它来转换成字符串。 ***.com/questions/9372815/… 【参考方案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 发送,但在这种情况下,您的服务器必须有能力处理它。 你不必担心,现在编辑并给人们正确的答案。 我们在这里互相帮助。不要粗鲁,在否决任何人的答案之前,请深入了解答案将要解释的内容。有几种方法可以使用代码解决问题。每个人都有自己的观点和解决方案。:) 请尝试查看一些这样的链接 - ***.com/questions/22879445/…以上是关于将推送通知的令牌发送到服务器。 Alamofire 错误的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将 Firebase 推送通知发送到特定令牌以及主题