浅谈 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://oba.by/
* 个性:https://oba.by/
* 本文标题: 《浅谈 Uniapp 推送–平台配置》
* 本文链接:https://lang.bi/2024/06/17249
* 短链接:https://oba.by/?p=17249
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

37 comments

  1. Level 5
    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山东省青岛市 联通

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

  4.  Level 5
    Microsoft Edge 126 Microsoft Edge 126 GNU/Linux GNU/Linux cn广东省珠海市 电信

    个推不是也会出现后台进程被杀死的问题么?我看了一下推送的这篇文章,有介绍的方案对比,https://cloud.tencent.com/developer/article/1962767,第三方都会被杀死,只有一个个匹配所有厂商的才行

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

      这文章也太老了,之前的文章我也简单说过安卓的推送实现机制。
      只有继承厂商sdk一条路,剩下的基本都是死路。
      当然如果不依赖于厂商sdk,也有其他办法极端策略是后台保活,但这个毕竟不是常规手段。

      1.  Level 5
        Microsoft Edge 126 Microsoft Edge 126 GNU/Linux GNU/Linux cn广东省珠海市 电信

        是啊,不好搞,还是博客容易,有消息就发邮件好了。还有一个期待,就是安卓都消失,都统一用鸿蒙就好了

        1. 公主 Queen 
          Google Chrome 124 Google Chrome 124 Android 10 Android 10 cn山东省烟台市芝罘区 联通

          如果都基于google的框架根本没这些破事。

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

      但凡用安卓的都可以用google的框架,并不是制裁,国内手机厂商阉割了而已,再加上大墙导致服务可用性不稳定。

      1.  Level 5
        Microsoft Edge 126 Microsoft Edge 126 GNU/Linux GNU/Linux cn广东省珠海市 电信

        查了一下,是说“经过咨询,得知这是由于合规性的原因,手机厂商不得不在系统中去除掉GMS,这对某些用户来说,影响还是非常大的”,“安卓设备可以免费使用AOSP,但安装GMS必须得到谷歌授权”,确实是阉割了,因为给谷歌交费只为了用个推送,不能用其他配套服务,划不来

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

          借口而已,看看出口的国产手机定然是带gms的。
          即使是国内的也并非完全不能装,https://www.huaweicentral.com/honor-is-installing-google-apps-gms-in-the-chinese-version-of-its-smartphones/

          1.  Level 5
            Microsoft Edge 126 Microsoft Edge 126 GNU/Linux GNU/Linux cn广东省珠海市 电信

            那厂商为啥都不装,是因为要给谷歌交费的原因么,有好事的话肯定会用的,但是遭殃的不是手机消费者,是我们开发者

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

              开发者为什么会遭殃啊?如果gms能用,只需要对接gms一家就够了,本身都是安卓,能够做到跟苹果一样的推送体验,多好。
              手机厂商自己打造护城河而已,没必要说的那么高端,跟制裁没关系,跟开发也没关系。
              国内太多的产品都是去掉了灵魂的,比如gms,比如apple vision, 同样ios也有定制化阉割。
              再深层的就不说了。

              1.  Level 5
                Microsoft Edge 126 Microsoft Edge 126 GNU/Linux GNU/Linux cn广东省珠海市 电信

                我就是说各自搞各自的,开发者就遭殃,所以用GMS会好一些。这个护城河好像也没起到啥作用,我是小米用户,随时换华为的,没任何顾忌,体验上没变化。麻烦的只是开发者而已 blush

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

                  还是有作用的,把个人开发者都拦到河外了。不上他们的商店,没法发推送消息。开玩笑 dance,这都不叫事啊,真正的利益在于营收,手机市场的在自己品牌上的垄断作用,强迫各种游戏厂商分渠道分发。
                  如果是游戏,就涉及到收入分成了,要接他们的支付。如果不上他们的市场,你推送消息,推送活动都下不去。
                  都说苹果黑,国内的手机市场渠道更黑。哈哈哈。

发表回复

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