什么是push通知栏消息?

news2024/9/29 22:49:56

我是3y,一年CRUD经验用十年的markdown程序员👨🏻‍💻常年被誉为职业八股文选手

今天继续更新Austin,给Austin新增一个发送渠道(PUSH通知栏推送)

Push通知栏消息是非常常见的,几乎每个APP都会做这个功能(没有消息推送的APP不是一个好的APP)

一般我们认为Push消息能做以下的事情:

1、唤醒用户,提高用户的留存率,提高产品活跃度。我手机下载了APP,但我似乎把它已经忘记了(好久没用了),如果此时这个APP给我推送一条我有兴趣的内容。我可能会继续用这个APP,甚至从此活跃起来(购买消费)

2、告诉用户我有新的产品上线了(带动功能模块使用率)。本来APP是做商城的,现在做起直播来了。但好多用户好像都不咋留意到,此时我推送一条直播的消息给用户,可能用户就爱起直播了。

Push消息能够在你手机闭屏时(即便你没有打开APP),通过通知来给你推送信息,是一种能够直接触达用户的消息推送。相对短信而言:成本低、样式多样(支持标题/简介/图片)、链接跳转直接到APP。

不过如果用户收到不感兴趣的推送可能会导致:用户把通知消息给关闭了甚至把APP给卸载了

01、技术上如何发送通知栏消息?

要给用户下发消息,我们得维护APP 客户端和服务端的「长连接心跳」。这个长连接心跳如果由我们自行来维护,难度会很大,绝大部分的公司不会自建推送服务。目前我们流行手机的操作系统类型分为两种:安卓和iOS

1、iOS我们默认走的是官方推送的渠道APNS。iOS 在系统层面与苹果 APNs(Apple Push Notification service)服务器建立连接,系统收到 APNs 服务器消息后会帮我们转发到相应的APP上。iOS端我们可以直接接入APNs服务器下发推送消息

2、安卓由于Google在国内访问不稳定,在国内暂未统一掉推送服务(工信部牵头成立的“安卓统一推送联盟”还在期待中)。目前更多的是众多的手机厂商在其定制的系统中也内置了推送功能,如小米、华为等。由于接入成本的问题,也出现了大量的第三方推送服务提供商,比如个推、极光、友盟、信鸽等等。第三方推送服务提供商也会接入对应的手机厂商来实现对消息的下发

接入第三方服务商推送的流程大致下:

02、使用Demo SDK

正常发送PUSH是需要客户端开发的,Austin更多关注的是服务端推送,而非客户端的内容,所以我直接用个推提供的SDK Demo做调试。

文档如下:https://docs.getui.com/getui/start/product/

从文档里以及我的实践后发现要使用该SDK,可以分为以下步骤:

1、登录注册个推账号,得到appid、appkey、appsecret

2、下载Android版本的消息推送Demo:https://docs.getui.com/download.html

3、下载Android Studio来打开刚才下载的SDK:https://developer.android.com/studio

4、修改config.gradle文件的账号相关参数值:

5、编译成功后,直接build出对应的apk

6、将apk文件给安卓的手机下载,就完事了

03、服务端推送消息

服务端文档: https://docs.getui.com/getui/server/rest_v2/introduction/

从文档可得知接入无非就是调用HTTP时带有需要token(鉴权)参数。这个好办,我们在接入钉钉工作消息的时候有过类似的操作了,写个定时任务刷新下就完事了:

为了照顾部分还没把xxl-job这个定时任务框架的部署起来的同学,我专门写了个手动刷新Token的接口。

至于服务端其他的貌似没什么好说,无非就增加了一点细节,直接看代码吧:com.java3y.austin.handler.handler.impl.PushHandler

项目代码完整地址:http://gitee.com/zhongfucheng/austin

04、了解些技术之外的消息推送

推送的内容又可以简单分为以下的几类:

  • 系统功能类(消息提醒):比如快递签收通知,发货通知,关注的主播开播(上新)啦
  • 营销类(活动/优惠类):比如某某时间开始大促,赶紧抢购
  • 内容类:比如晓明哥经典语录,穿搭风格教程
  • 资讯类:新闻、时事内容推送

针对上面所说的Push推送好处以及坏处,这就非常考验我们到底推送些什么内容给用户了

1、推的内容好:提高用户留存率、提高产品活跃度、提高用户对APP的粘度

2、推的内容差:用户对你的内容变得麻木、直接关闭通知消息、甚至卸载APP

那么一般我们会考虑些什么因素呢?有以下几个:文案推送频率推送时机、、推送的人群

关于文案,有一个叫做爱达法则(AUDA)公式:

图片爱达法则

相信大家都听过UC标题,如果有一个好的文案内容那吸引用户点击的概率就更高一些。目前一般的推送会用一些小技巧去提高用户的

  • 在文案末尾后加上引导话术:“点我揭晓”、“→”、“>>”
  • 多多利用数字:众多品牌3折起,更有10元的裤子,你还等什么?
  • 增加emoji表情
  • 结合热点:今天晓明哥又出新语录!
  • 更强的关联性:比如除夕的时候,你微信收到N个祝福消息,但一看就是群发的,没啥意思。但此时,有个朋友给你发了条消息:“3y 春节快乐”。你就觉得有点温馨了,是不是!

关于推送频率,推送的频率要控制得当,假设我在一天里:

  • 9-10点给你推条:关注这些,你的Java水平一定能提高!
  • 12-14点给你推条:三年大佬经验总结,买了就是赚到!
  • 18-19点给你推条:耗时一个月整理的英语资源!一次性全部分享给你!
  • 21-22点给你推条:价值1999的大数据资源,免费送给你!

那显然,你肯定会取关我,是不是。一般来说一天用户不能收到3天以上的推送,消息多了,算是骚扰了,甚至不能每天都给用户推送(可能隔天推一次会好一些)。

关于推送时机,如果是资讯类的,推送的时机显然是越早越好了,不然别人家的都推送完了,用户都知道了。你才推送,那谁还点进去啊。

(同时作为是官方推送的,还应保持准确性

一般推送内容,我们都是希望在大家相对空闲的时间去推送,比如:

上班路上及早餐时间(9-10点)、午休(12-14点)、下班路上(6-7点)、睡前(21-22点)

不同的用户群体,时间可会有一定的调整。所以这就得寻找相对适宜的时间了。

我正写着代码,正在烦躁着这个Bug怎么这么的无厘头时,此时一个Push推送过来:“你有一张代金券即将到期!”,那此时我真的是XXX了。

关于推送人群,现在互联网公司都有自己的用户画像系统,给同一类人推送合适的消息是较合适的。比如说:

  • 有一批用户刚注册平台,给这批用户推送个优惠券,促进他的购买欲
  • 有一批用户可能身高150+,给这批用户推荐些矮小的搭配风格推荐
  • 有一批用户的地址位置在广州,给这批用户推荐一下:广州就该这么穿,你就是整条街最靓的仔!
  • …这儿可以跟文案关联起来,这样的推送会更加精准一些,用户可能会点击的概率会更高一些。

我是一个学Java的,收到的通知消息却是:“Excel从入门到精通,只要30天!”(关键是我也没关注过Excel的内容),那此类的推送如果多了,我很可能就把这个APP删了。

4.1 推送消息容易产生事故

为什么会经常出现类似的事故呢?我认为最主要的原因是:预发和线上的环境是同一套

众所周知,我们的系统都有几套的环境(比如说本地/线下/预发/线上 环境),其中大多数公司的预发和线上环境数据库是同一套的,只是预发环境调用的是预发环境的接口,线上环境调用的是线上环境的接口而已。

推送这种系统的线上和预发环境其实没多大的区别,因为在底层是调用外部的接口来实现发送的,所以预发和线上环境其实调的都是同一个接口

于是我们会在预发环境下配置了「白名单」,在白名单内的用户才能收到消息来尽可能避免环境的问题

其次,在大多数情况下,推送事故往往是「运营」的推送导致的。运营要推送消息给用户,首先需要圈选一个人群去推送。

人群量需要管控:我们在圈选的时候,如果运营圈定的人数大于一个阈值,我们会走邮箱让主管确认是否需要圈选这么一个大的人群去推送。这块有两个目的:

1、首先我们是认为推送的人群应该是精细化的,什么标签的人群应该收到什么的推送。不应该圈定一个庞大的人群去推送同一条文案的消息(新闻APP除外)。

2、即便出了事故,也只是一部分用户能收到,而不是全体用户。

对于很多系统其实都不需要全体用户推送这个功能

在运营圈定人群后,我们会有单独的测试功能去「测试单个用户」是否能正常下发消息,文案链接是否存在问题。这一个步骤是必须要做的,给用户发出的消息,首先要经过自己的校验。

当确认链接和文案都无问题后,则提交任务,走工单审批后才能发送。

如果在启动之后发现文案/链接存在问题,还可以拦截剩余未发甚至撤回部分的消息。

在线上环境消息应该有「平台性去重」的逻辑:

1、在某段时间内,过滤掉重复消息

2、运营类消息推送(圈定人群的方式去下发消息)同一个用户需要相隔一段时间才能下发一次。

虽然说,我们制定了很多的规则去尽量避免事故的发生,但不得不说推送平台还是一个容易出现事故的系统。

推荐Java开源项目

如果想学Java项目的,我还是强烈推荐我的开源项目消息推送平台Austin,可以用作毕业设计,可以用作校招,又可以看看生产环境是怎么推送消息的。
仓库地址(求各位兄弟们三连哟!)

  • 项目Gitee仓库链接:http://gitee.com/zhongfucheng/austin
  • 项目GitHub仓库链接:http://github.com/ZhongFuCheng3y/austin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【elementUI】自定义封装el-upload上传内容

文章目录为实现如图所示功能&#xff0c;点击第一步弹出模态框&#xff0c;第二部将所有文件导入&#xff0c;第三步点击确定的时候上传到后台接口&#xff0c;封装一个组件 1.搭建template <div style"display: inline-block; margin-left: 10px;"><el-bu…

leaflet 设置多个marker,导出为一个geojson文件(066)

第066个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中使用L.marker设置多个markers, 通过数据重组,导出为geojson文件。 这里面 ayer instanceof L.Marker 是一个很重要的判断条件,可以灵活地去运用。 直接复制下面的 vue+openlayers源代码,操作2分钟即可…

Ubuntu20.04LTS设置DNS解析(解决系统重启DNS不生效的问题)

文章目录背景介绍解决方案背景介绍 近期买了一台戴尔的工作站&#xff0c;搭建的是Ubuntu20.04系统&#xff0c;使用时发现Ubuntu20.04系统上网经常卡顿&#xff08;上网方式是有线网&#xff0c;使用的千兆网口和千兆网线&#xff09;。 使用网速测试工具speedtest-cli进行了…

redis五大数据结构

目录1.1 Redis数据结构-动态字符串1.2 Redis数据结构-intset1.3 Redis数据结构-Dict1.4 Redis数据结构-ZipList1.5 Redis数据结构-ZipList的连锁更新问题1.6 Redis数据结构-QuickList1.7 Redis数据结构-SkipList1.8 Redis数据结构-RedisObject2.0 Redis数据结构-String2.1 Redi…

前端性能优化的整理笔记

&#x1f6b4; 前言大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库&#x1f3c4;利用碎片化的时间&#xff0c;系统的整理&#xff0c;性能优化的知识点。&#x1f3af; 前端性能优化&#xf…

初识网络原理,关于网络编程的基础

一.网络的重要性对于程序员而言&#xff0c;几乎所程序都依赖于网络&#xff0c;对于公司来说&#xff0c;几乎所有产品也是依赖于网络&#xff0c;这些产品不仅包括面向用户的产品&#xff0c;公司内部的一些服务也是基于公司内网来进行相互调用的。二.组网方式①基于网线直连…

每日学术速递2.15

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.YOWOv2: A Stronger yet Efficient Multi-level Detection Framework for Real-time Spatio-temporal Action Detection 标题&#xff1a;YOWOv2&#xff1a;用于实时时空动作检测的…

Jenkins构建项目和tomcat项目发布脚编写本详细教程jenkins 2.361版本

jenkins部署教程可查看上一篇文档jenkins部署指定任意版本和配置详细教程 jenkins 2.361版本示例_争取不加班&#xff01;的博客-CSDN博客Jenkins服务器去拉取代码&#xff0c;所以要下载git客户端 yum -y install git jenkins服务器下载下面就是构建发布任务测试可以性测试使用…

第一个Python程序-HelloWorld与Python解释器

数据来源 01 第一个Python程序-HelloWorld 1&#xff09;打开cmd&#xff1a; windows R 打开运行窗口输入cmd 2&#xff09;进入Python编写页面 输入&#xff1a;python 3&#xff09;然后输入要写的Python代码然后回车 print("Hello World!!!") print() …

利用AxhubCharts元件库在Axure RP中快速创建可视化统计图

利用AxhubCharts元件库在Axure RP中快速创建可视化统计图&#xff0c;可创建的可视化统计图有折线图、柱状图、堆叠柱状图、条形图、堆叠条形图、面积图、饼图、环形图、漏斗图、甘特图、散点图等。具体操作步骤见下文。 1.下载AxhubCharts.rplib元件库文件 2.载入AxhubChart…

【Node.js】模块化

模块化模块化的基本概念模块化规范Node.js中模块化分类模块作用域向外共享模块作用域的成员Node.js中的模块化规范模块化的基本概念 指解决一个复杂问题时&#xff0c;自顶向下逐层把系统划分成若干模块的过程对于整个系统来说&#xff0c;模块是可组合&#xff0c;分解和更换…

mysql的一些底层学习

数据库三大范式 1、第一范式&#xff1a;确保每列保持原子性 2、第二范式&#xff1a;确保表中每列都与主键列相关 3、第三范式&#xff1a;确保表中每列都与主键列直接相关而不是间接相关 不要一味的去追求符合范式要求&#xff0c;实际项目中&#xff0c;需求 > 性能 …

GPT-3(Language Models are Few-shot Learners)简介

GPT-3(Language Models are Few-shot Learners) GPT-2 网络架构 GPT系列的网络架构是Transformer的Decoder&#xff0c;有关Transformer的Decoder的内容可以看我之前的文章。 简单来说&#xff0c;就是利用Masked multi-head attention来提取文本信息&#xff0c;之后利用MLP和…

内嵌于球体的多边形

( A, B )---2*30*2---( 1, 0 )( 0, 1 ) 做一个网络让输入只有2个节点&#xff0c;每个训练集里有两张图片&#xff0c;让B的训练集全为0&#xff0c;排列组合A&#xff0c;观察迭代次数平均值的变化。 共得到32组数据&#xff0c; 差值结构 A-B 迭代次数 1 1 3*2*0*0 104…

计算机网络学习笔记(二)物理层

物理层&#xff08;传输比特0/1&#xff09;基本概念 物理层下的传输媒体 1. 导引型 同轴电缆&#xff0c;双绞线&#xff08;绞合可抵御干扰&#xff09;&#xff0c;光纤&#xff0c;电力线 2. 非导引型&#xff08;调制振幅 频率 相位&#xff09; 无线电波&#xff0c;微…

SpringBoot整合MybatisPlus(powernode CD2207)(内含教学视频+源代码)

SpringBoot整合MybatisPlus&#xff08;powernode CD2207&#xff09;&#xff08;内含教学视频源代码&#xff09; 教学视频源代码下载链接地址&#xff1a;https://mp.csdn.net/mp_download/manage/download/UpDetailed 目录SpringBoot整合MybatisPlus&#xff08;powernode…

项目搭建规范

一. 代码规范 1.1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。 # http://editorconfig.org root true [*] # 表示所有文件适用 charset utf-8 # 设置文件字符集为 utf-8 indent_style space # 缩进…

数据结构 - 栈 与 队列 - (java)

前言 本篇介绍栈和队列&#xff0c;了解栈有顺序栈和链式栈&#xff0c;队列底层是双链表实现的&#xff0c;单链表也可以实现队列&#xff0c;栈和队列的相互实现和循环队列&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&a…

Splashtop:支持M1/M2芯片 Mac 电脑的远程控制软件

M1和M1芯片的Mac电脑现在越来越多了。M1和M2的强大性能&#xff0c;让使用者们办公、娱乐如虎添翼。 M1 芯片于2020年11月11日推出&#xff0c;是Apple 首款专为Mac打造的芯片&#xff0c;拥有格外出色的性能、众多的功能&#xff0c;以及令人惊叹的能效表现。M1 也是Apple 首款…

Docker搭建MySQL主主模式+Keepalived实现高可用集群

1.环境准备&#xff1a; 系统版本 Centos7 IP&#xff1a;10.10.11.79 master IP&#xff1a;10.10.11.80 backup 虚拟ip&#xff1a;10.10.11.82 Docker环境&#xff1a; centos7离线安装docker&#xff0c;docker-compose keepalived安装包&#xff1a; https://www.k…