Uni-App之推送[UniPush]

注意:
  1. 从HBuilderX 1.7.2起,uni-app支持UniPush。
  2. 从HBuilderX 2.0.3 alpha起,5+App支持UniPush。
  3. UniPush是DCloud推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、魅族等手机厂商的系统级推送和个推等第三方推送。(vivo只对某些开发者开放)

架构

UniPush.png

推送消息类型

通常推送消息分以下两种类型:

  • 通知栏消息(推送通知)
    UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。

  • 透传消息(推荐使用该方式)
    即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作
    UniPush推送服务对透传消息的数据符合以下格式时做了特殊处理,即符合该格式的透传消息会自动显示到系统通知栏【需要确保app通知权限已打开】

{"title": "xxx","content": "xxx","payload": "xxx"}

起步

开发者中心为应用开通UniPush

开通之后在开发者后台可以直接推送消息,方便测试。【不能调试安装,需云打包/自定义基座】
注:【由于没有配置厂商通道所以此时我们的app只能在线接收消息。但ios不用,既然提到就多说一点,配置ios推送服务必然要配置ios推送证书,其实在制作iOS推送证书的时候可以直接制作一份发布环境的Push证书,因为该证书发布和开发环境都能用,何必做两份呢。~抖机灵
苹果推送不同于安卓,他自有一套推送,配置好证书,在线离线都能接收】


窝窝头.img

没有配置厂商的只有最上面两个输入框,按要求填入对应的信息然后推送,手机能收到推送就说明基础的配置完成了。

以上步骤可以向让安装了该软件的设备(安卓在线) 群发 通知,他们或早或晚收到推送。

【没有说全部!推送服务并不可靠,它会因为网络、推送服务器、以及用户设备、等各种原因导致譬如 “为什么我收不到推送” 这种问题。测试人员问过我几万遍了,头都痛。它适用于推送一些活动广告,一些重要内容,要求必达的信息不说顺丰,东风也不一定送的准。总之宗旨就是:收到了最好,收不到算了】

群发可能并不满足项目的需求,可能我们需要像并夕夕一样,针对我买的 劳斯莱斯-幻影 单独给我推送:尊敬的并夕夕高端用户;您全款购买的 劳斯莱斯-幻影 已发货,正在等待揽收。
它如何单独推送到我的手机上,避免全世界都知道我的Rolls-Royce发货提前去蹲点拆包的呢?

我们要与后端一起维护一个表,比如叫UserCID。这个表包含我的基本账户信息,以及CID。这个CID是客户机ID的意思,是设备唯一标识。

我们要做的是一打开app就去获取CID,由于它不是天生就有,所以我们做一个定时器等到它为之。然后用户登录的时候,将这个唯一标识伴随我们的账户信息一起传给服务器。服务器验证登录成功的同时将它保存到UserCID.

    // #ifdef APP-PLUS
            getCID() {
                var timer = setInterval(() => {
                    var info = plus.push.getClientInfo();
                    this.cid = info.clientid;
                    if (this.cid) {
                        clearInterval(timer);
                        console.log('获取CID',this.cid)
                    }
                }, 1000);
            },
    //#endif

当需要给特定用用户推送的时候,后台通过UserCID查询它的CID,然后推送的时候给推送服务器传入该CID.(这是后端接入的时候所要做的)

前端要验证是否完成自己的职责,可以获取到自己的CID,然后新建一个txt,将自己的CID复杂进去,切不要多打空格什么的,多个CID用回车分隔,总之不要做一些画蛇添足的东西,否则可能解析失败。

然后到推送后台推送消息,使用创建的cid.txt

里面写了几个CID就将推送给几个设备,错的CID、失效的CID他也会算上,以实际到位为准就好。
如果你测试的收到了,那你就算做对了。

以上在线推送我们已经做到了(安卓),为了离线也能收到推送,我们需要配置安卓厂商通道。
【推送是推送服务器向指定设备的指定app发送通知消息,当app在线,它知道是自己的邮件自己会接收<符合特定格式将展示在通知栏>。由于移动设备的各种省电策略、以及安全机制,会出现杀后台的情况,这样在后台的应用说不定某个时间就离线了,这时候邮件会保存在手机本地(类似学校门卫),app什么时候醒了自己就去门卫领邮件去了。这时候可能就不够及时。为了离线也能将信息发送到用户手机上,我们就需要借助手机系统,让他帮我们通知。(安卓出自谷歌,谷歌服务有推送,国内被墙,各厂商开始在自己系统上集成推送服务。厂商通道)】
厂商通道申请以及配置流程

如果要更完善一些,我们就要脑补一些情景,比如我偶然一次忘了带我的8848手机,于是我借对面屌丝程序员的手机登录并夕夕看看我的劳斯莱斯送到哪了。这时候它手机上的唯一标识就也保存到了UserCID,并且关联的是我的账号。于是将来给我推送的时候,会给两部手机推送,即便当时借他手机看完物流就退出账号了。所以我们要在退出账号的时候,把账号和CID再给后台,让后台在UserCID中把该账号名下的这个CID删除。

课外补充:

不论安卓、IOS在app图标上都会显示未读消息角标。提示的是未读消息数量。见过的手机不多,本人自用小米、apple,初步判断在安卓系统上角标是由系统自己管理的,当用户清理通知栏消息,或者将app激活到前台,角标会消失。下次有新的推送时会将角标激活。
但是ios角标是需要我们通过代码管理的,后台可以知道未读消息数量,前端通过接口获取未读消息数然后写到IOS角标上。

setBadeg(newNum) {
                //设置应用图标的数量  
                plus.runtime.setBadgeNumber(newNum);
            }

推送会增加未读消息数,由此我们利用推送可以附带参数的功能,让后端在推送的时候直接将未读消息数量告诉我们。这样可以减少一点app的请求。【注:推送附带参数放在payload中】

//监听接收透传消息事件  
            plus.push.addEventListener('receive', (msg) => {
                console.log('监听接收透传消息事件', msg);
                uni.getSystemInfo({
                    success: (res) => {
                        console.log(res.platform);
                        if (res.platform == "ios") {
                            // console.log(msg.payload);
                            let num = parseInt(msg.payload.num);
                            this.setBadeg(num);
                        }
                    }
                })
            }, false);

当用户查看了消息,我们需要将角标消息减一。【注:这是本地减一,并未从服务器获取】

subBadeg() {
                //导入ios UIApplication
                var UIApplication = plus.ios.import("UIApplication");
                var app = UIApplication.sharedApplication();
                //获取应用图标的数量  
                var oldNum = app.applicationIconBadgeNumber();
                var newNum = oldNum - 1;
                //设置应用图标的数量  
                plus.runtime.setBadgeNumber(newNum);
            },

当用户点击通知栏消息进入app,我们也需要角标减一。

//监听系统通知栏消息点击事件
            plus.push.addEventListener('click', (msg)=> {
                console.log('监听到消息点击事件', msg);
                uni.getSystemInfo({
                    success: (res) => {
                        // console.log(res.platform);
                        if (res.platform == "ios") {
                            this.subBadeg();
                        }
                    }
                });
            }, false);

设置角标的方式多种多样,从服务器获取未读也好,本地计算也好,凭具体情况以及个人喜好。

>以上内容仅为个人见解,有误欢迎指出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 由于谷歌服务在国内不能用,Android 的推送真是一大痛点,但也推动了国内一批做第三方服务的厂商。第三方推送...
    U卡技术阅读 6,584评论 1 10
  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,664评论 0 15
  • 前言 本文是一篇转载文章,在这一篇实用的文章里,你可以按照上面的步骤实现不借助第三方和服务器端,自己给自己的设备发...
    進无尽阅读 1,657评论 6 6
  • 推送 推送简直就是一种轻量级的骚扰方式 自从有了推送,各个公司基本上都在使用推送,这确实是一个比较好的提醒方式,A...
    eclipse_xu阅读 7,985评论 9 116
  • 写在前面:应用场景很重要 如果你的公司有这样一个硬性的需求:用户将APP退出到后台的时候,当该用户收到推送的时候,...
    CoderZb阅读 5,415评论 14 13