无法在 swift 3.0 中转换正确的设备令牌

Posted

技术标签:

【中文标题】无法在 swift 3.0 中转换正确的设备令牌【英文标题】:Unable to convert correct device token in swift 3.0 【发布时间】:2017-01-07 07:11:02 【问题描述】:

使用 swift 3.0,我正在尝试将 deviceToken(数据)转换为字符串,但它没有返回正确的字符串。

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) 

    let tokenString = deviceToken.reduce("")  string, byte in
        string + String(format: "%02X", byte)
    
    print("token: ", tokenString)


有谁知道我做错了什么?

【问题讨论】:

你得到了什么,你期望什么? 【参考方案1】:

在 Swift 3 中它更容易一些,因为 Data 的行为类似于数组:

let tokenString = deviceToken.map String(format: "%02X", $0) .joined()

【讨论】:

除非我弄错了,否则这将给出与使用 Swift 3 中的数据序列的 OP 代码完全相同的结果。【参考方案2】:

您可以使用此方法对其进行转换,因为设备令牌是一个 UInt8 数组,其形式为您描述每个字节的字节。

let token = String(describing: deviceToken as CVarArg).replaceCharacters("<> ", toSeparator: "")

由于我经常使用 replaceCharacters(),我创建了对 String 的扩展

extension String func replaceCharacters(_ characters: String, toSeparator: String) -> String let characterSet = CharacterSet(charactersIn: characters) let components = self.components(separatedBy: characterSet) let result = components.joined(separator: toSeparator) return result

【讨论】:

【参考方案3】:
 var token = NSData.init(data: deviceToken).description
    token = token.replacingOccurrences(of: "<", with: "")
    token = token.replacingOccurrences(of: " ", with: "")
    token = token.replacingOccurrences(of: ">", with: "")
    token = String.init(describing: token)

    print(token)

希望这将帮助您获得准确的设备令牌以发送到您的服务器。

【讨论】:

以上是关于无法在 swift 3.0 中转换正确的设备令牌的主要内容,如果未能解决你的问题,请参考以下文章

无法在 swift 3 / FBSDK 4.17 中正确检索 FBSDKAccessToken 当前令牌

无法为类型 Unsafepointer Swift 3.0 转换初始化变量

获取“无法打开应用程序,因为您无权查看它。 “将项目代码从swift 2.2转换为swift 3.0之后

Swift 3.0 令牌过期如何自动调用令牌?

在 Swift 中注册远程通知时未收到设备令牌

如果令牌更改,则无法通过令牌接收发送到设备的测试通知,ios与swift