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 后台要配置各种信息:
注册个推之后,依然要设置各种信息:
如果不注册个推的话,貌似离线推送是推送不下去的。但是官方文档对于注册个推账号进行配置的说明并不是很多。之前一直没注意个推,直到后来翻阅文档发现提到了个推,重新注册之后华为的推送才测试成功。
所以如果离线推送不成功的话,注册下个推的账号,并且配置一下试试。
37 comments
灵妹妹的丝袜短了,并且上面没字母
额 是短裤短了 袜子上面就是没有字母的
看不懂,下一篇
这~~不至于,不至于,😂
太技术型了,姐姐技术好高!
说不上,不过是善于解决问题而已~~
嘻嘻
华为不就是安卓市场吗,分这么细?那ios是无缘了?
iOS是最好处理的平台,所以我连提都没提,只要按照官方文档操作,基本就ok了。
唯一需要处理的是可能同样的注册个推进行配置。
好技术
这技术太干啦,完全不懂。只能看看丝袜和大腿。
有的看就行
每篇文章都这么优质。
今天我是来看丝袜的,因为文章我看不懂。
酱紫吗 今天还会发
又是一篇干货
记性不好记录下来,免得忘了
路过。。。。
大爷,来玩啊~~
我之前看这个系列文章就有疑问是怎么实现安卓推送的,因为安卓不同厂家各自为政。原来还是要自己去配置,并且用第三方实现。我就说哪有这么菩萨的东西一键代办了。
说到个推与我有一定渊源。他家老板是我老婆校友,所以当时留意过,并且收到过入职邀请。最后没有去,但巧的是我曾经入职的一家公司,后面就是个推所在的写字楼。他们也不容易,最开始做短信,后来转型做 app 推送。好多年了啊还活着。
这个真是菩萨也没办法,不单纯是配置玩了就行,还需要集成各个厂商的 sdk。
unipush 个推之类的把很多集成工作给做了,也算是节省了一部分集成的工作,但是并不是配置玩了就能用了,国内的厂商各自为政,只能去适配他们,这才是最恶心的。
例如微信、qq 之类的的都是白名单机制,但是到了普通开发者,就是黑名单机制了。
个推这么多年在推送这一块算是做的比较成熟优秀的,之前还有友盟之类的,不过基于 uni 的合作机制,使用个推是最方便的。
原来你这还有渊源啊,真不错。
个推老板出道比较早,和酷家乐老板,以及拼多拼黄铮都是浙大出来的。酷家乐我们也接触过,唯独拼多多没有,在它发迹之前我们没这个眼光。三位浙大出来的老板被比较过,但是如今势力不可同日而语。当然比起他们任何一个我都是废物。
哎,这么比,我也是废物。
还是那个无所作为的战五渣。
我只能看看题图。别的不懂。
没必要懂啦,毕竟不是做这个的。
隔行如隔山嘛
个推不是也会出现后台进程被杀死的问题么?我看了一下推送的这篇文章,有介绍的方案对比,https://cloud.tencent.com/developer/article/1962767,第三方都会被杀死,只有一个个匹配所有厂商的才行
这文章也太老了,之前的文章我也简单说过安卓的推送实现机制。
只有继承厂商sdk一条路,剩下的基本都是死路。
当然如果不依赖于厂商sdk,也有其他办法极端策略是后台保活,但这个毕竟不是常规手段。
是啊,不好搞,还是博客容易,有消息就发邮件好了。还有一个期待,就是安卓都消失,都统一用鸿蒙就好了
如果都基于google的框架根本没这些破事。
确实这样的,谷歌配合制裁下也是无奈啊
但凡用安卓的都可以用google的框架,并不是制裁,国内手机厂商阉割了而已,再加上大墙导致服务可用性不稳定。
查了一下,是说“经过咨询,得知这是由于合规性的原因,手机厂商不得不在系统中去除掉GMS,这对某些用户来说,影响还是非常大的”,“安卓设备可以免费使用AOSP,但安装GMS必须得到谷歌授权”,确实是阉割了,因为给谷歌交费只为了用个推送,不能用其他配套服务,划不来
借口而已,看看出口的国产手机定然是带gms的。
即使是国内的也并非完全不能装,https://www.huaweicentral.com/honor-is-installing-google-apps-gms-in-the-chinese-version-of-its-smartphones/
那厂商为啥都不装,是因为要给谷歌交费的原因么,有好事的话肯定会用的,但是遭殃的不是手机消费者,是我们开发者
开发者为什么会遭殃啊?如果gms能用,只需要对接gms一家就够了,本身都是安卓,能够做到跟苹果一样的推送体验,多好。
手机厂商自己打造护城河而已,没必要说的那么高端,跟制裁没关系,跟开发也没关系。
国内太多的产品都是去掉了灵魂的,比如gms,比如apple vision, 同样ios也有定制化阉割。
再深层的就不说了。
我就是说各自搞各自的,开发者就遭殃,所以用GMS会好一些。这个护城河好像也没起到啥作用,我是小米用户,随时换华为的,没任何顾忌,体验上没变化。麻烦的只是开发者而已
还是有作用的,把个人开发者都拦到河外了。不上他们的商店,没法发推送消息。开玩笑 ,这都不叫事啊,真正的利益在于营收,手机市场的在自己品牌上的垄断作用,强迫各种游戏厂商分渠道分发。
如果是游戏,就涉及到收入分成了,要接他们的支付。如果不上他们的市场,你推送消息,推送活动都下不去。
都说苹果黑,国内的手机市场渠道更黑。哈哈哈。