t***@163.com
t***@163.com
  • 发布:2026-09-08 08:49
  • 更新:2026-09-08 08:50
  • 阅读:33

【报Bug】unipush华为手机在线创建不了消息,离线可以

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 5.24

手机系统: Android

手机系统版本号: Android 16

手机厂商: 华为

手机机型: HUAWEI Pura 70 Pro

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
uni.onPushMessage((res) => {  
      const { type, data } = res;  
      // ── 1. 处理透传消息到达(App 在线时走个推通道,需客户端创建本地通知)──  
      if (type === "receive") {  
        const payload = this._parsePayload(data);  
        const title = data.title || payload.title;  
        const content = data.content || payload.content;  
        const badgeNum = Number(payload.badge) || 1;  
      const payloadStr =  
        typeof payload === "object" ? JSON.stringify(payload) : payload;  
      if (title && content) {  
        uni.createPushMessage({  
      title,  
      content,  
      icon,  
      payload,  
    });  
      }  
      }  
    });

云函数

'use strict';  
const uniPush = uniCloud.getPushManager({  
    appId: "__UNI__"  
})  
exports.main = async (event) => {  
    let obj = JSON.parse(event.body)  
    const res = await uniPush.sendMessage({  
        "push_clientid": obj.cids,   
        "title": obj.title,   
        "content": obj.content,   
        "payload": obj.data,  
        "force_notification": false,   
        "category": {    
            "harmony":"WORK"    
        },  
        "options": {    
            "android": {    
                    "HW": {    
                        "/message/android/category": "WORK"    
                    },    
            },    
            "harmony":{  
                "options":{  
                    "HW":{  
                            "/pushOptions/testMessage": true  
                    }  
                }  
            },  
        },  
        "request_id": obj.request_id     
    })  
    return res   
};

操作步骤:

在线推送华为创建不了消息,小米oppo可以

预期结果:

能通过uni.createPushMessage方法让APP在线创建消息

实际结果:

华为在线APP可以监听方法可以接收到消息,创建不了消息

bug描述:

离线可以通过厂商创建消息,在线推送uni.onPushMessage监听,收到消息,但是用uni.createPushMessage创建不了消息

2026-09-08 08:49 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

感谢您的反馈。针对您提交的 Bug 报告,作为 DCloud 官方人员,我从 uniCloud 后端架构与 uni-push 云端一体的角度对该问题进行了评审与分析,评审结果如下:

1. Bug 反馈内容完整性评审

  • BUG 描述:描述较为清晰,明确指出了“离线可通过厂商通道创建,在线 uni.onPushMessage 可监听到,但 uni.createPushMessage 无法创建”的现象,且指明了仅华为存在此问题,小米和 OPPO 正常。这对排查厂商通道差异非常有帮助。
  • 代码示例:提供了客户端监听代码与云函数推送代码,基本完整。但客户端代码中 iconpayload 变量未展示其取值来源,且未提供 manifest.json 中 push 模块及 App 包名等配置信息,在排查厂商通道问题时可能需要补充。
  • 复现步骤:描述较简略。建议补充:是否使用的是自定义基座/云打包证书?华为开发者后台的推送服务配置与 category 申请是否已通过审核?
  • 预期结果与实际结果:合理且明确,符合逻辑。
  • 分类信息:完整,包含了 HBuilderX 版本、手机机型(HUAWEI Pura 70 Pro)、系统版本(Android 16)及 Vue 版本等关键信息。
  • 附件说明:由于系统限制,我无法识别和查看附件内容,请以文字和代码形式提供关键信息。

2. Bug 是否成立分析

结合知识库与 uniCloud 官方文档分析,该 Bug 大概率不成立,原因如下:

1. 透传消息与 force_notification 参数机制
根据 uni-push 服务端 API 文档,在您的云函数代码中设置了 "force_notification": false。这意味着服务端下发的是透传消息。此时,消息不会由系统通知栏直接展示,而是交由客户端的 uni.onPushMessage 监听。在监听事件的 type === "receive" 中,由开发者自行调用 uni.createPushMessage 创建本地通知。您描述的“在线监听可收到,但需自行创建”现象正是该机制设计的预期行为。

2. 华为厂商通道对“应用在线”的处理差异
华为厂商通道(HMS Push)对应用在线时的透传消息处理策略与其他厂商(如小米、OPPO)存在差异。当 App 在线时,华为推送服务可能会拦截透传消息,导致 App 前端无法触发 receive 事件,进而无法执行 uni.createPushMessage

3. category 参数配置要求
根据官方文档说明,华为通道对消息分类有严格要求。如果未配置 category 或配置不当,会被认定为营销类别,从而受到限量推送或静默推送(静音且需下拉系统通知栏才可见)。请检查您的代码中 "category": {"harmony":"WORK"} 是否已在华为开发者后台申请并审核通过对应的权限。

3. 替代方案与建议

如果您希望无论是离线还是在线状态,都能在华为手机系统通知栏直接显示消息,而无需依赖前端 uni.createPushMessage,建议修改云函数的推送参数:

"force_notification": false 修改为 "force_notification": true

根据 uni-push 官方文档 说明,force_notification 设置为 true 时,无论是离线推送还是在线推送,服务端都会自动创建通知栏消息,无需客户端再手动调用 uni.createPushMessage

建议您先尝试调整该参数验证效果。同时,请确保在 HBuilderX 中配置了华为厂商推送相关的证书和包名,并使用自定义基座或云打包进行测试。

内容为 AI 生成,仅供参考

要回复问题请先登录注册