浅谈 Uniapp 推送–平台配置

uniapp 整体来说生态也算是非常完善了,存储空间, 云函数,集成的各种一体化 uniadmin 功能。不过这些功能并非免费的,为了快速的进行继承最简单的方法就是使用 uni 提供的服务。

本文不是完整的 unipush 开发指南,有很多基础的功能,建议还是阅读官方的文档。照着操作之后,基本大多数的功能就算集成完了。对于在线推送来说相对比较简单,因为 app 在运行这,所以推送也比较容易实现。接入方式参考下面的链接:

https://uniapp.dcloud.net.cn/unipush-v2.html

而上面的基础在于uni push admin:

https://ext.dcloud.net.cn/plugin?name=uni-push-admin

在集成之后,最主要的功能就是对接 push 接口,而 unipush 的服务端接口必须部署在云空间内,是通过云函数实现的。

在 cloudfunctions 下新建 babyUniPush 模块:

index.js 代码:

'use strict';
const uniPush = uniCloud.getPushManager({
    appId: "__UNI__GUIMIQUAN" //换成自己的
})
exports.main = async (event, context) => {
    //返回数据给客户端
    // return event
    let obj = JSON.parse(event.body) //这是重点 解析json字符串
    const res = await uniPush.sendMessage({
        "push_clientid": obj.cids, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000  
        "title": obj.title, // 标题  
        "content": obj.content, // 内容  
        "payload": obj.data, // 数据  
        "force_notification": true, // 服务端推送 需要加这一句  
        "request_id": obj.request_id, //请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失  
        "options": obj.options //消息分类,没申请可以不传这个参数  
    })
    return res;
};

这个云函数是要上传到 uni 的云空间内的:

此时还需要将云函数 url 化,否则是无法从外部调用的,点击列表右侧的详情(挡住了),设置云函数的地址和路径:

到这里,云函数就可以通过服务端代码调用了。

接下来是服务端的代码,选择自己的语言编写吧,这里只有 python 版本:

def send_push_request(cids, title, content, data, request_id, options):
    '''
    const uniPush = uniCloud.getPushManager({appId:"__UNI__XXXXXX"}) //注意这里需要传入你的应用appId
    exports.main = async (event, context) => {
        return await uniPush.sendMessage({
            "push_clientid": "xxx",     //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
            "force_notification":true,  //填写true,客户端就会对在线消息自动创建“通知栏消息”。
            "title": "通知栏显示的标题",
            "content": "通知栏显示的内容",
            "payload": {
                "text":"体验一下uni-push2.0"
            },
            "options":{
                "HW": {
                     // 值为int 类型。1 表示华为测试消息,华为每个应用每日可发送该测试消息500条。此 target_user_type 参数请勿发布至线上。
                      "/message/android/target_user_type":1
                  } ,
                "VV": {
                     //值为int 类型。0 表示正式推送;1 表示测试推送,不填默认为0。此 pushMode 参数请勿发布至线上。
                      "/pushMode":1
                  }
            }
        })
    };'''
    body = {
        "cids": cids,  # 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000
        "title": title,  # 标题
        "content": content,  # 内容
        "data": data,  # 数据
        "force_notification": True,  # 服务端推送 需要加这一句
        "request_id": request_id,  # 请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失
        "options": options  # 消息分类,没申请可以不传这个参数
    }
    print(body)

    resp = requests.post("https://guimiquan.cn/babyUniPush", json=body)
    print('Push Resp:', resp.text)

至于业务代码,那就自己编写吧。

到这里,在线推送基本就能跑通了。主要还是离线推送部分,涉及到几个问题。第一个是各个应用市场的推送配置,我这里只有华为的,其他的不上架,没有推送相关的配置。

需要设置应用推送回执:

而这个设置,在官方文档里面没有说明,需要去个推的设置里面进行配置。

所以,单纯的在 uni 的后台配送推送貌似是不行的,具体可以参考下面的链接:

[厂商配置文档](https://dev.dcloud.net.cn/pages/app/push2/thirdparty)  
[华为app信息](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/myProject/)  
[华为推送设置](https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/myProject)  
[个推开发者后台](https://dev.getui.com/dev/#/single-product/mcHvdmWx9p8y7nysIkcrJ8/dos/351843721478777/appDataOverview)

dcloud 后台要配置各种信息:

注册个推之后,依然要设置各种信息:

如果不注册个推的话,貌似离线推送是推送不下去的。但是官方文档对于注册个推账号进行配置的说明并不是很多。之前一直没注意个推,直到后来翻阅文档发现提到了个推,重新注册之后华为的推送才测试成功。

所以如果离线推送不成功的话,注册下个推的账号,并且配置一下试试。

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://h4ck.org.cn/
* 个性:https://oba.by/
* 本文标题: 《浅谈 Uniapp 推送–平台配置》
* 本文链接:https://image.h4ck.org.cn/2024/06/17249
* 短链接:https://oba.by/?p=17249
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

25 comments

  1. Level 4
    Microsoft Edge 125 Microsoft Edge 125 Windows 10 Windows 10 us美国加利福利亚州洛杉矶

    灵妹妹的丝袜短了,并且上面没字母

  2.  Level 4
    Safari 17 Safari 17 Mac OS X 10.15 Mac OS X 10.15 cn贵州省贵阳市 移动

    华为不就是安卓市场吗,分这么细?那ios是无缘了?

    1. 公主 Queen 
      Google Chrome 120 Google Chrome 120 Windows 10 Windows 10 cn山东省临沂市 联通

      iOS是最好处理的平台,所以我连提都没提,只要按照官方文档操作,基本就ok了。
      唯一需要处理的是可能同样的注册个推进行配置。

  3.   Level 6
    Google Chrome 125 Google Chrome 125 Mac OS X 10.15 Mac OS X 10.15 cn浙江省杭州市 华数

    我之前看这个系列文章就有疑问是怎么实现安卓推送的,因为安卓不同厂家各自为政。原来还是要自己去配置,并且用第三方实现。我就说哪有这么菩萨的东西一键代办了。

    说到个推与我有一定渊源。他家老板是我老婆校友,所以当时留意过,并且收到过入职邀请。最后没有去,但巧的是我曾经入职的一家公司,后面就是个推所在的写字楼。他们也不容易,最开始做短信,后来转型做 app 推送。好多年了啊还活着。

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      这个真是菩萨也没办法,不单纯是配置玩了就行,还需要集成各个厂商的 sdk。
      unipush 个推之类的把很多集成工作给做了,也算是节省了一部分集成的工作,但是并不是配置玩了就能用了,国内的厂商各自为政,只能去适配他们,这才是最恶心的。
      例如微信、qq 之类的的都是白名单机制,但是到了普通开发者,就是黑名单机制了。
      个推这么多年在推送这一块算是做的比较成熟优秀的,之前还有友盟之类的,不过基于 uni 的合作机制,使用个推是最方便的。
      原来你这还有渊源啊,真不错。

      1.   Level 6
        Safari 17 Safari 17 iPhone iOS 17.4.1 iPhone iOS 17.4.1 cn浙江省杭州市 移动

        个推老板出道比较早,和酷家乐老板,以及拼多拼黄铮都是浙大出来的。酷家乐我们也接触过,唯独拼多多没有,在它发迹之前我们没这个眼光。三位浙大出来的老板被比较过,但是如今势力不可同日而语。当然比起他们任何一个我都是废物。

        1. 公主 Queen 
          Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

          哎,这么比,我也是废物。
          还是那个无所作为的战五渣。

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      没必要懂啦,毕竟不是做这个的。
      隔行如隔山嘛

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注