友盟推送SDK的deviceToken

2,143 阅读1分钟

前段时间接入友盟推送SDK,正常流程的文档友盟官网推送文档. 说明下遇到一些问题。

获取deviceToken的方式

iOS13获取deviceToken的方式有所改变

        var deviceId = String()
        if #available(iOS 13.0, *) {
            let bytes = [UInt8](deviceToken)
            for item in bytes {
                deviceId += String(format:"%02x", item&0x000000FF)
            }
            print("iOS 13 deviceToken:\(deviceId)")
        } else {
            let device = NSData(data: deviceToken)
            deviceId = device.description.replacingOccurrences(of:"<", with:"").replacingOccurrences(of:">", with:"").replacingOccurrences(of:" ", with:"")
            print("我的deviceToken:\(deviceId)")
        }

deviceToken失效问题

一般情况下下面五种情况会导致deviceToken失效

  • 卸载重装App
  • 系统恢复
  • 从备份中恢复应用
  • iOS 大版本升级
  • 关闭打开推送

后来知道有2种情况也会导致deviceToken失效 如果服务端后台有个配置环境的布尔值,如果改变这个值,会导致deviceToken失效 如果在友盟将生产环境获取到的deviceToken放到友盟后台进行检验或者加入测试设备都将有可能导致这个生产环境的deviceToken失效