o***@aihuayan.com
o***@aihuayan.com
  • 发布:2025-12-03 14:53
  • 更新:2025-12-22 15:44
  • 阅读:244

鸿蒙next集成wgt资源文件,使用uni-push无效

分类:鸿蒙Next

manifest.json中勾选了uni-push,使用HBuilderX打包鸿蒙wgt资源文件,集成到鸿蒙原生工程,推送无效

2025-12-03 14:53 负责人:DCloud_uniCloud_JSON 分享
已邀请:

最佳回复

o***@aihuayan.com

o***@aihuayan.com (作者)

1、按照文档配置云函数
2、运行本地云函数,测试本地云函数正常
3、修改云函数后必须右键上传修改后的云函数
4、重要配置:"options":{
"HW": {
"importance": "NORMAL",
"category": "MARKETING",
}
}

Ask小助手

Ask小助手

鸿蒙Next平台使用uni-push需特殊配置。根据知识库,uni-push在鸿蒙平台需完成以下关键步骤:

  1. 厂商推送配置:必须按华为推送配置流程完成应用创建和回执配置,否则无法统计到达数据且离线推送失效。

  2. 权限配置:在manifest.json勾选uni-push后,需通过harmony-permissions插件配置鸿蒙权限(如ohos.permission.INTERNET),因鸿蒙权限需在子模块中声明。

  3. 版本兼容性:若使用uni-app x项目(推荐鸿蒙Next开发),需确认使用uni-push 2.0(参考uni-app x uni-push文档)。传统uni-app项目仅支持uni-push 1.0,可能存在兼容问题。

  4. 集成方式:wgt集成到原生鸿蒙工程时,需确保:

    • 删除unpackageharmony-configs目录后重新打包
    • 检查文件路径不含中文/特殊字符(鸿蒙工具链限制)
    • 在原生工程的entry/src/main/ets/config.json中验证权限配置

注意:未配置厂商推送会导致华为设备离线消息无法送达。建议优先使用uni-app x开发模式,并确保HBuilderX版本≥4.85(正式版)。

内容为 AI 生成,仅供参考
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

打印 provider 是否正常?。https://uniapp.dcloud.net.cn/api/plugins/provider.html#getprovider

是功能完全不可用,还是某些功能不可用?

  • o***@aihuayan.com (作者)

    我们的逻辑是:通过uni.getPushClicentId方法获取到cid之后,后端直接调用云函数push转化的url发送需要推送的消息,现在的问题是获取到cid之后,直接通过DCloud后台发送单个cid的消息,能收到推送,通过云函数push发送的消息收不到

    2025-12-08 16:19

  • DCloud_UNI_OttoJi

    回复 o***@aihuayan.com: 我看两回事,你的问题是 provider 找不到,还是没有问题只是询问云函数的写法?你代码是如何实现的,提供复现工程和操作步骤,提供更多信息,有助于定位和解答你的问题。

    2025-12-08 17:01

  • o***@aihuayan.com (作者)

    回复 DCloud_UNI_OttoJi: 我们没有调用getprovider方法,只是在uni代码中调用了uni.getPushClicentId获取到cid,然后将cid当成参数传给云函数接口实现的推送

    2025-12-08 19:13

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: uni.onPushMessage((res) => {

    console.log("收到推送消息:",res) //监听推送消息

    })

    是写在 App.vue 吗?

    2025-12-08 19:59

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 是的,在App.vue中写的

    2025-12-09 09:35

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,鸿蒙原生工程集成wgt资源文件,不走App.vue中的onLaunch方法,我们的uni.onPushMessage监听是在App.vue的onLaunch中的,所以没有推送,这个怎么修改比较好?

    2025-12-09 11:00

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 鸿蒙原生工程直接参考:https://docs.getui.com/getui/mobile/harmonyos/vendor/vendor_open/

    2025-12-09 12:05

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 好的,我先看看

    2025-12-09 12:10

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,这个是直接集成个推原生的啊,不能修改uni中的某些逻辑,实现推送吗?我尝试了将uni.onPushMessage的监听放在index.vue(首页)的onLoad方法中,在线推送可以收到消息,离线推送不行,这样的修改会有什么影响吗?

    2025-12-09 12:16

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 不是集成原生个推,是用原生写法实现onPushMessage。你说在线推送正常、离线失效,大概率不是代码问题。先建空uni-app项目,按文档跑通uni-push(以确保离线推送配置/参数...没问题),再折腾鸿蒙原生工程集成。

    2025-12-09 13:26

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 好的,我先尝试一下,谢谢大佬

    2025-12-09 13:33

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,我现在直接运行uni-app项目到鸿蒙next真机,在线推送可以收到推送消息,离线推送收不到,已经在:https://dev.dcloud.net.cn/pages/app/push2/thirdparty 这个地址中的"厂商推送设置",设置了鸿蒙next的client_id和鸿蒙JSON密钥文件内容,还需要配置什么?

    2025-12-09 15:53

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 离线推送按文档一步一步实现,基本上都是哪里细节没注意引起的。

    2025-12-09 16:08

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 请问具体是哪个文档?我是按照https://uniapp.dcloud.net.cn/unipush-v2.html 和https://docs.getui.com/getui/mobile/harmonyos/harmonyosstudio/ 配置的。

    2025-12-09 16:54

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 还有一个 api 文档 https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/api.html 鸿蒙一般是category没有配置对引起离线推送失败

    2025-12-09 20:15

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,还有哪里需要注意的吗?我看着文档又走了一遍流程,暂时没看到哪里没设置的,我们云函数代码中设置了category:"category": { "harmony":"MARKETING", "huawei": "MARKETING", "vivo":"ORDER" }

    2025-12-10 09:53

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 你都传MARKETING了,鸿蒙怎么可能允许你离线推送

    2025-12-10 17:04

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 不能使用MARKETING?那需要用什么?

    2025-12-10 17:13

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,应该跟MARKETING没关系,我换成其他的传值,推送离线消息也是不行的,我从DCloud后台拿到devicetoken到AGC后台推送,是可以收到离线推送消息的

    2025-12-10 17:23

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,你那里有没有鸿蒙Next推送相关的demo,能收到离线消息和在线消息。

    2025-12-10 17:37

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 先别套业务,和文档示例一模一样跑通技术先,再去纠结你的业务逻辑

    2025-12-10 19:04

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,我没明白你说的是什么意思,我现在没纠结业务,离线推送和在线推送就是技术方面的问题吧,因为我这里是公司项目,不方便给demo,推送相关的代码逻辑就只是在App.vue中的onLaunch获取到cid,云函数根据cid推送消息,云函数的代码我已经贴在下面的中了,现在就是在线消息可以收到推送,离线消息一直收不到推送

    2025-12-10 19:21

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 如果大佬有demo的话,可以发给我一份,我对照着看一下是哪里没配置好。

    2025-12-10 19:21

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 和文档示例一模一样跑通技术先。因为看你"harmony":"MARKETING",这块可能业务问题不允许离线推送。你就和我们文档中的写成一样。文档原文:例如:{"harmony":"EXPRESS", "huawei":"EXPRESS", "vivo":"ORDER"}。其中,harmony 与 huawei 的取值相同详情查看

    2025-12-10 20:57

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 这个我之前就试过了,也是不行的

    2025-12-11 09:37

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 我们这个是一直存在的项目,只是在之前的基础上加上了鸿蒙next的配置,iOS、Android、卓易通版本的推送都是可以的,只有鸿蒙next版本的不行

    2025-12-11 09:45

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 这块没什么悬念,就是配对各种 key、证书、参数弄对,按文档走即可。目前所有这块遇到问题的最终都是哪里细节哪一步弄错了引起的,

    2025-12-11 11:26

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 在DCloud后台------> uni-push 2.0 ------> 厂商通道配置中,"华为"和"鸿蒙next"的配置是不一样的,"华为"的配置还是以前卓易通版本的配置,"鸿蒙next"的配置是新建的鸿蒙版本的clicent_id和鸿蒙JSON密钥文件内容,这个配置对鸿蒙next的离线推送有影响吗?

    2025-12-11 11:51

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 我就是按文档走的,文档内的一些截图的都是以前的了,有一些我也不确定,你知道的都有什么地方弄错会影响离线推送可以说一下吗?我检查一下。

    2025-12-11 11:56

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 或者你给我贴一个你说的文档,我要明确的文档链接。

    2025-12-11 12:19

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,我现在运行本地云函数推送,离线场景下可以收到消息;使用HTTP URL方式推送,离线场景下还是不能收到。请问这是什么原因?这两种场景有什么区别?

    2025-12-17 17:57

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 没有任何区别,建议检查两个点:1. 确保上传到云端的云函数是最新的 2. 确保通过HTTP请求到云函数时,传递的参数是否正确,是否传了字符串没有转为对象;(到 unicloud web 控制台看此云函数的运行日志,记得打印数据的时候把类型也打出来);

    2025-12-17 19:55

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: 大佬,请问:1、在哪里看最新版本云函数?2、此为HTTP 推送的日志数据:请求入参: {

    "args": {

    "path": "/",

    "httpMethod": "POST",

    "headers": {

    "content-length": "225",

    "x5-uuid": "8caff8f75d046b1f9949bc37cae597c9",

    "x-client-ip": "116.62.78.94",

    "x-forwarded-for": "116.62.78.94, 120.27.173.90, 39.96.119.212",

    "platform": "{{Platform}}",

    "accept": "/",

    "authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjM2MjU5OTUsInVzZXJfaWQiOjJ9.YijQM0aECOhb_T-MZEpj9ZtVObeDs3n0LT8mrbIKfFA",

    "x-real-ip": "116.62.78.94",

    "x-sinfo": "on",

    "host": "fc-mp-94143704-b954-41a7-b9c8-80b8b5b4041c.next.bspapp.com",

    "content-type": "application/json",

    "x-forwarded-by": "172.28.195.32:80",

    "accept-encoding": "gzip",

    "user-agent": "Apifox/1.0.0 (https://apifox.com)"

    },

    "queryStringParameters": {},

    "isBase64Encoded": false,

    "body": "{\n \"force_notification\": true,\n \"push_clientid\": [\n \"c0af409e21d2e8d38ae67ec2e964be57\"\n ],\n \"title\": \"纪要生成无忧\",\n \"content\": \"聚焦关键事项,听脑AI 纪要,周末近在眼前!\",\n \"record_id\": 0\n}"

    },

    "requestId": "ac1cc3201766122706468183939"

    }

    请求响应状态: success

    2025-12-19 13:44

  • o***@aihuayan.com (作者)

    回复 DCloud_uniCloud_JSON: HTTP推送的消息,App离线情况下,通知栏没有显示;点击打开App后,通知栏就会显示。

    2025-12-19 13:46

  • DCloud_uniCloud_JSON

    回复 o***@aihuayan.com: 我通过 uni-im 联系你吧,实时沟通

    2025-12-19 13:55

o***@aihuayan.com

o***@aihuayan.com (作者)

//云函数中的代码  
// 简单的使用   
'use strict';  
const { fail } = require("assert");  

const uniPush = uniCloud.getPushManager({appId:"__UNI__EC57CCB"}) //注意这里需要传入你的应用appId    
exports.main = async (event, context) => {  
    // 服务端请求  
    if(event.body){  
        let obj = JSON.parse(event.body);  
        if(!obj.title){  
            return{  
                code: -1,  
                message: '参数缺少title内容'  
            }  
        }  

        if(!obj.content){  
            return{  
                code: -1,  
                message: '参数缺少content内容'  
            }  
        }  
        return await uniPush.sendMessage({  
            "push_clientid": obj.push_clientid || '',   //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid  
            "force_notification": true,  
            "title": obj.title || '听脑AI服务通知',     
            "content": obj.content || '任务处理完成,请点击查看!',    
            "settings": {    
                //消息有效期设置,单位毫秒,-1表示不设离线。默认是 2 小时,取值范围:-1 ~ 3 * 24 * 3600 * 1000(3天)之间    
                "ttl": 1 * 24 * 3600 * 1000,  
            },    
            "payload": {  
                "text": obj.record_id || ''  
            },  
            "category": {  
                "harmony":"MARKETING",  
                "huawei": "MARKETING",  
                "vivo":"ORDER"  
            },  
            "options":{    
                "XM": {  
                    "/extra.channel_id": "130214"  
                },  
                "OP": {  
                    "/channel_id": "channel_001",  
                    "/category": "TODO",  
                    "/notify_level": 1,  
                },  
                "HO": {  
                    "/android/notification/importance": "LOW" //importance字段值为LOW:资讯营销类消息 ;importance字段值为NORMAL:服务与通讯类消息  
                },  
                "harmony": {  
                    "/notification/importance": "NORMAL",  
                    "/notification/category": "MARKETING",  
                    "/notification/contentType": "NORMAL_TEXT",  
                    "/notification/badgeNumber": "1",  
                    "/notification/badge": "true"            // 角标  
                }  
            },  
            request_id: String(Date.now()),  
        })  
    }else{  
        if(event.push_clientid){  
            return await uniPush.sendMessage({  
                "push_clientid": event.push_clientid || '',     //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid  
                "force_notification": true,  
                "title": event.title || '标题',     
                "content": event.content || '内容',     
                "category": {  
                    "harmony":"MARKETING",  
                    "huawei": "MARKETING",  
                    "vivo":"ORDER"  
                },  
                "options":{    
                    "XM": {  
                        "/extra.channel_id": "130214"  
                    },  
                    "OP": {  
                        "/channel_id": "channel_001",  
                        "/category": "TODO",  
                        "/notify_level": 1,  
                    },  
                    "HO": {  
                        "/android/notification/importance": "LOW" //importance字段值为LOW:资讯营销类消息 ;importance字段值为NORMAL:服务与通讯类消息  
                    },  
                    "harmony": {  
                        "/notification/importance": "NORMAL",  
                        "/notification/category": "MARKETING",  
                        "/notification/contentType": "NORMAL_TEXT",  
                        "/notification/badgeNumber": "1",  
                        "/notification/badge": "true"            // 角标  
                    }  
                },  
                request_id: String(Date.now())  
            })  
        }else{  
            return {  
                code: -1,  
                message: '参数有误'  
            }   
        }  
    }  
};

要回复问题请先登录注册