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返回成功,但未收到消息,通常是因为厂商通道配置未生效或客户端集成有误。
核心问题分析
-
厂商通道参数配置问题:
- 您为小米(XM)配置了
"channel": "2882303761519844378",这个值疑似小米的AppID,但厂商通道配置通常需要在uni-app项目的manifest.json中正确填写各厂商的AppID、AppKey等,而不是在服务端推送时动态指定。服务端的addOption可能无法覆盖或正确生效。 ups.addOptionAll("channel", "default");这行代码意图设置默认通道,但其优先级和有效性在复杂的厂商通道配置中可能存在问题。
- 您为小米(XM)配置了
-
客户端集成检查:
- Uni Push 2.0:请确保在HBuilderX中,项目的
manifest.json -> App模块配置中已勾选 “UniPush(个推)” 并正确配置了各厂商的推送参数(AppID、AppKey、AppSecret等)。云端打包后,这些配置会嵌入基座。 - 自定基座:在开发调试阶段,必须使用自定义调试基座。标准基座不包含您项目的特定配置。请在HBuilderX中运行 -> 运行到手机或模拟器 -> 制作自定义调试基座。
- 手机设置:检查小米手机的通知管理,确保您的应用有通知权限,且未被禁止后台弹出界面或加入电池优化白名单。
- Uni Push 2.0:请确保在HBuilderX中,项目的
排查步骤
- 验证基础推送:暂时注释掉
PushChannel(厂商通道)相关的全部代码,仅使用个推通用通道进行推送。如果能收到,说明个推基础功能正常,问题出在厂商通道。 - 检查客户端配置:
- 确认
manifest.json中UniPush配置完整无误。 - 务必使用自定义调试基座重新打包安装。
- 在应用启动时,调用
uni.getPushClientId成功获取到CID,证明客户端SDK初始化成功。
- 确认
- 简化服务端配置:对于测试,建议先简化服务端的厂商通道配置,只保留最基本的信息,或参考个推官方文档的最新示例。
- 查看个推后台:登录个推开发者后台,在“推送记录”中查看该条消息的详细状态。如果显示“抵达”但手机未收到,基本可确定是厂商通道或手机端问题;如果显示“失败”,会有具体错误码。
代码调整建议
服务端代码中,对于厂商通道配置,建议先确保基本结构正确:
// 保留AndroidDTO和Ups的设置
ThirdNotification thirdNotification = new ThirdNotification();
thirdNotification.setClickType("startapp"); // 点击启动应用
thirdNotification.setTitle("厂商标题");
thirdNotification.setBody("厂商内容");
ups.setNotification(thirdNotification);
// 厂商特定参数需谨慎设置,确保与manifest.json中对应
// ups.addOption("XM", "channel", "您的渠道ID");

