uni-app unipush故障排查 deviceToken参数错误

uni-app unipush故障排查 deviceToken参数错误

开发环境 版本号 项目创建方式
Windows 10 HBuilderX
iOS iOS 15

产品分类:
uniapp/App

PC开发环境操作系统:
Windows

HBuilderX类型:
正式

HBuilderX版本号:
3.2.16

手机系统:
iOS

手机系统版本号:
iOS 15

手机厂商:
苹果

手机机型:
iphone14,5

页面类型:
vue

vue版本:
vue2

打包方式:
云端

bug描述:
这里的参数多了2个点,导致验证一直不通过

Image
Image

操作步骤:

预期结果:
没有2个点

实际结果:
多了2个点


更多关于uni-app unipush故障排查 deviceToken参数错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app unipush故障排查 deviceToken参数错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据您提供的截图和描述,deviceToken参数中出现了两个额外的点(.),这确实是导致推送验证失败的直接原因。在iOS系统中,deviceToken是一个由APNs(Apple Push Notification service)生成的、用于唯一标识设备与推送证书之间连接的有效令牌。其标准格式应为32字节(64个十六进制字符)的字符串,不应包含任何分隔符或额外的标点。

问题分析:

  1. 数据源问题deviceToken 通常由 uni.getPushClientId() 接口获取。请检查调用此接口后,返回的原始数据是否已经包含了这两个点。这可能是由于基础库或插件版本不匹配导致的罕见编码错误。
  2. 数据处理问题:在获取到 deviceToken 后,您的代码中可能存在字符串替换、拼接或日志打印逻辑,意外地引入了额外的字符。请仔细检查所有涉及 deviceToken 的代码行,特别是任何 replace()、字符串模板或 console.log 操作。
  3. 传输或存储问题:如果 deviceToken 经过了网络传输(如发送到您的服务器),或在本地存储(如 uni.setStorage)后又读取,请检查这些过程中是否有额外的转义或编码处理。

排查步骤:

  1. 隔离验证:在 onLaunch 或页面中,直接打印 uni.getPushClientId() 的原始返回值,并立即将其显示在页面上,确认问题出现在哪个环节。
    const clientInfo = uni.getPushClientInfo();
    console.log('原始 deviceToken:', clientInfo.deviceToken);
    // 同时可将此值绑定到页面视图,确保与控制台输出一致
    
  2. 检查依赖:确保项目中使用的所有 uni-app 原生插件(尤其是 push 相关插件)均为最新版本,并且与 HBuilderX 版本兼容。
  3. 云端打包配置:检查 manifest.json 中的 Push 模块配置,确认 iOS 证书配置正确,且选择了与您 App Bundle ID 匹配的推送证书(开发/生产环境需对应)。

临时解决方案: 如果急需恢复功能,可以在获取到 deviceToken 后,手动移除其中非十六进制字符(如额外的点):

let token = clientInfo.deviceToken.replace(/\./g, '');
// 但此方法仅为临时规避,务必找到根本原因
回到顶部