uni-app Uni Push 个推Api厂推接口返回成功但未收到消息

uni-app Uni Push 个推Api厂推接口返回成功但未收到消息

开发环境 版本号 项目创建方式
Windows win7 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:win7

HBuilderX类型:正式

HBuilderX版本号:3.2.2

手机系统:Android

手机系统版本号:Android 11

手机厂商:小米

手机机型:K30S Ultra

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

示例代码:

//根据cid进行单推  
PushDTO<Audience> pushDTO = new PushDTO<Audience>();  
// 设置个推推送参数  
pushDTO.setRequestId(System.currentTimeMillis() + "");  
PushMessage pushMessage = new PushMessage();  
pushDTO.setPushMessage(pushMessage);  
GTNotification notification = new GTNotification();  
pushMessage.setNotification(notification);  
notification.setTitle("标题" + new Date());  
notification.setBody("body");  
notification.setClickType("url");  
notification.setUrl("https://www.getui.com");  
//设置推送条件  
Settings settings = new Settings();  
settings.setTtl(1000 * 60);  
pushDTO.setSettings(settings);  

// 设置接收人信息  
Audience audience = new Audience();  
pushDTO.setAudience(audience);  
audience.addCid(clientId);  

//设置厂商推送消息参数  
PushChannel pushChannel = new PushChannel();  
AndroidDTO androidDTO = new AndroidDTO();  
Ups ups = new Ups();  
ThirdNotification thirdNotification = new ThirdNotification();  
thirdNotification.setClickType(CommonEnum.ClickTypeEnum.TYPE_STARTAPP.type);  
thirdNotification.setTitle("" + System.currentTimeMillis());  
thirdNotification.setBody("content");  
ups.setNotification(thirdNotification);  
ups.addOption("HW", "badgeAddNum", 3);  
ups.addOption("HW", "badgeClass", "com.getui.demo.GetuiSdkDemoActivity");  
ups.addOption("OP", "app_message_id", 11);  
ups.addOption("VV", "message_sort", 1);  
ups.addOption("XM", "channel", "2882303761519844378");  
ups.addOptionAll("channel", "default");  
androidDTO.setUps(ups);  
pushChannel.setAndroid(androidDTO);  
pushDTO.setPushChannel(pushChannel);  

PushApi pushApi = createPushApi();  
// 进行cid单推  
ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);  
if (apiResult.isSuccess()) {  
    // success  
    System.out.println(apiResult.getData());  
} else {  
    // failed  
    System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());  
}  

更多关于uni-app Uni Push 个推Api厂推接口返回成功但未收到消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

已解决,原来是多厂商参数不匹配

更多关于uni-app Uni Push 个推Api厂推接口返回成功但未收到消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据您提供的代码和描述,这是一个典型的厂商通道推送配置问题。虽然个推API返回成功,但未收到消息,通常是因为厂商通道配置未生效或客户端集成有误。

核心问题分析

  1. 厂商通道参数配置问题

    • 您为小米(XM)配置了 "channel": "2882303761519844378",这个值疑似小米的AppID,但厂商通道配置通常需要在uni-app项目的manifest.json中正确填写各厂商的AppID、AppKey等,而不是在服务端推送时动态指定。服务端的addOption可能无法覆盖或正确生效。
    • ups.addOptionAll("channel", "default"); 这行代码意图设置默认通道,但其优先级和有效性在复杂的厂商通道配置中可能存在问题。
  2. 客户端集成检查

    • Uni Push 2.0:请确保在HBuilderX中,项目的 manifest.json -> App模块配置 中已勾选 “UniPush(个推)” 并正确配置了各厂商的推送参数(AppID、AppKey、AppSecret等)。云端打包后,这些配置会嵌入基座。
    • 自定基座:在开发调试阶段,必须使用自定义调试基座。标准基座不包含您项目的特定配置。请在HBuilderX中运行 -> 运行到手机或模拟器 -> 制作自定义调试基座。
    • 手机设置:检查小米手机的通知管理,确保您的应用有通知权限,且未被禁止后台弹出界面或加入电池优化白名单。

排查步骤

  1. 验证基础推送:暂时注释掉 PushChannel(厂商通道)相关的全部代码,仅使用个推通用通道进行推送。如果能收到,说明个推基础功能正常,问题出在厂商通道。
  2. 检查客户端配置
    • 确认 manifest.json 中UniPush配置完整无误。
    • 务必使用自定义调试基座重新打包安装
    • 在应用启动时,调用 uni.getPushClientId 成功获取到CID,证明客户端SDK初始化成功。
  3. 简化服务端配置:对于测试,建议先简化服务端的厂商通道配置,只保留最基本的信息,或参考个推官方文档的最新示例。
  4. 查看个推后台:登录个推开发者后台,在“推送记录”中查看该条消息的详细状态。如果显示“抵达”但手机未收到,基本可确定是厂商通道或手机端问题;如果显示“失败”,会有具体错误码。

代码调整建议

服务端代码中,对于厂商通道配置,建议先确保基本结构正确:

// 保留AndroidDTO和Ups的设置
ThirdNotification thirdNotification = new ThirdNotification();
thirdNotification.setClickType("startapp"); // 点击启动应用
thirdNotification.setTitle("厂商标题");
thirdNotification.setBody("厂商内容");
ups.setNotification(thirdNotification);

// 厂商特定参数需谨慎设置,确保与manifest.json中对应
// ups.addOption("XM", "channel", "您的渠道ID");
回到顶部