当前位置: 首页 > 编程日记 > 正文

国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟

前言

第三方移动推送对接,刚开始是移动端发起的。在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为什么不能做移动推送?

话说,项目里目前所使用的推送就是自己做的。但是在App离线情况下,消息就收不到了。想起来了,这是最最重要的问题,是为了在离线的情况下,App还能收到通知和消息。如果不是因为这个,这个对接可以不做。

因为手机端的app层不出穷太多了,为了给手机省电,用户会主动把运行在前端的app给咔嚓掉…虽然咔嚓掉,但是在有信息的情况下,用户还是希望能够收到信息。所以,很多自主研发的App都选择第三方移动推送,保证用户在离线的情况下也能够收到通知或信息。选择第三方移动推送,对于中小型App来说,绝对是一件省心、省钱、节约时间的好事儿。


一、来自小组成员的争议

目前国内市场上第三方移动推送服务犹如雨后春笋般一个接一个:极光、个推、阿里云移动推送、腾讯云移动推送、华为云移动推送、百度云移动推送、MobPush、小米移动推送,还有几年前就已经名声在外的统一推送联盟。这些都是程序员口中津津乐道的移动推送服务。

到底使用哪一家移动推送,团队成员各有异议。看了几本关于Android开发的书,其中一个有十几年Android开发经验的作者建议使用腾讯信鸽的推送,它的推送服务相对健全,对接的厂商涵盖较多。统一推送联盟,虽然几年前就被大家所熟知,但是不知道目前是什么情况。老板最关心的是价格,巴不得团队成员能够自主开发。

还有个同事,建议直接对接厂商,很不赞同,一个厂商一个厂商的对接过去,这要花费多久?真不确定,肯定会延迟项目进度的。

既然如此,异议如此多,那就做个调查吧!

二、开启调查

把大家所关心的事项都列进去:是否收费、对接难易度,对接文档是否健全,离线后是否能够收到通知,每个厂商是否需要单独对接等等。

移动推送服务参考文档地址
MobPush推送一、官网:https://mob.com/mobService/mobpush 二、开发者平台:https://new.dashboard.mob.com/#/mobPush/pushSet 三、移动端对接文档地址: 1、flutter:https://mob.com/wiki/detailed?wiki=MobPushForFlutterfenlei&id=136 2、Android:https://mob.com/wiki/detailed?wiki=MobYXXYMobpushAndroid&id=136 3、ios:https://mob.com/wiki/detailed?wiki=MobTechprivacypushios&id=136 四、服务器对接参考地址 https://mob.com/wiki/detailed?wiki=MobPushRestAPIfenlei1333&id=136 五、补充文档: https://www.mob.com/wiki/detailed?wiki=MobPush_chanpinjianjie&id=136
极光推送一、官网:https://www.jiguang.cn 二、开发者平台:https://www.jiguang.cn/accounts/login/form?nextUrl=%2Faccounts%2Fplatform 三、移动端对接文档地址: 1、Android:https://docs.jiguang.cn//jpush/client/Android/android_api/ 2、IOS: https://docs.jiguang.cn//jpush/client/iOS/ios_api/ 3、flutter端对接引用插件(jpush_flutter)参考链接: https://pub.flutter-io.cn/packages/jpush_flutter/install https://www.jianshu.com/p/c58e1f923d32 四、服务器对接参考地址: https://docs.jiguang.cn//jpush/server/push/rest_api_v3_push/ https://docs.jiguang.cn//jpush/server/server_sdk/
友盟推送一、官网:https://www.umeng.com/ 二、开发者平台:https://www.umeng.com/push 三、移动端对接文档地址: 1、Android:https://developer.umeng.com/docs/67966/detail/173238 2、IOS:https://developer.umeng.com/docs/67966/detail/207215 3、flutter端:https://developer.umeng.com/docs/67966/detail/216307 四、服务器对接参考地址: https://developer.umeng.com/docs/67966/detail/149296#h1-u670Du52A1u7AEFu4EE3u7801u8C03u7528u793Au4F8B13
百度云推送一、官网:http://push.baidu.com/ 二、开发者平台:http://push.baidu.com/console/app 三、移动端对接文档地址: 1、Android:http://push.baidu.com/doc/android/api 2、IOS:http://push.baidu.com/doc/ios/api 3、flutter端:暂未找到; 三、多厂商集成:http://push.baidu.com/doc/guide/manufacturer 四、服务器对接参考地址:http://push.baidu.com/doc/java/api
个推一、官网:https://www.getui.com 二、开发者平台:https://www.getui.com/push 三、移动端对接文档地址: 1、Android端:https://docs.getui.com/getui/mobile/android/androidstudio/ 2、IOS端:https://docs.getui.com/getui/mobile/ios/xcode/ 3、flutter端:https://pub.flutter-io.cn/packages/flutter_getui;https://github.com/GetuiLaboratory/getui-flutter-plugin 4、多厂商集成:https://docs.getui.com/getui/mobile/vendor/vendor_open/ 四、服务器对接参考地址: https://docs.getui.com/getui/server/rest_v2/introduction/
腾讯云信鸽一、官网:https://intl.cloud.tencent.com/zh/product/tpns?lang=zh 二、开发者平台:https://intl.cloud.tencent.com/zh/product/tpns?lang=zh 三、移动端对接文档地址: 1、Android端:https://intl.cloud.tencent.com/zh/document/product/1024/35769 2、IOS端:https://intl.cloud.tencent.com/zh/document/product/1024/35770 3、flutter端:https://pub.flutter-io.cn/packages/tpns_flutter_plugin 4、多厂商集成:https://intl.cloud.tencent.com/zh/document/product/1024/35286 四、服务器对接参考地址: https://intl.cloud.tencent.com/zh/document/product/1024/33755 五、收费地址:https://intl.cloud.tencent.com/zh/document/product/1024/36877
华为云移动推送一、官网:https://developer.huawei.com/consumer/cn/hms/huawei-pushkit/ 二、开发者平台:https://developer.huawei.com/consumer/cn/hms/huawei-pushkit/ 三、移动端对接文档地址: 1、Android端:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-app-quickstart-0000001071490422 2、IOS端:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/ios-dev-progress-0000001062221191 3、flutter端:https://pub.flutter-io.cn/packages/huawei_push 4、多厂商集成:暂未找到; 四、服务器对接参考地址: https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/android-server-dev-0000001050040110
小米移动推送一、官网:https://dev.mi.com/console/appservice/push.html 二、开发者平台:https://admin.xmpush.xiaomi.com/zh_CN/app/unauth 三、移动端对接文档地址: 1、Android:https://dev.mi.com/console/doc/detail?pId=100 2、IOS:https://dev.mi.com/console/doc/detail?pId=98 3、flutter端对接引用插件: https://pub.flutter-io.cn/packages/xiao_mi_push_plugin/install https://blog.csdn.net/u013491829/article/details/109330207 四、服务器对接参考地址: https://dev.mi.com/console/doc/detail?pId=1278 https://dev.mi.com/console/doc/detail?pId=1163
统一推送联盟参考文档: https://mp.weixin.qq.com/s/P3b6YvwHalzp2f-a6EaNag https://mp.weixin.qq.com/s/ZZVgfnprOg8jALkfh8Wn1w https://www.mobileservice.cn/ https://push.mobileservice.cn/index.html

三、调查结果

通过调查发现,每个第三方推送都有免费额度,但是想要高质量的离线推送,还是要收费的。也就是说服务质量和收费是绑定的。如果想要免费的,那就别考虑离线到达率了。

每个第三方移动推送支持的厂商支都不少,基本上涵盖了市面上流行的厂商:华为、小米、魅族、OPPO、VIVO、FCM、IOS。统一推送联盟支持的厂商最多,达到15个左右,把市面上的厂商包含个够,但还在内测中,推送的对接并未对外开放。

对于是否单独对接SDK,除了华为移动推送对接外,第三方推送已经把每个厂商的SDK都集成了,所以代码不需要单独写对接代码,只需要到对应的厂商平台申请一下权限,配置一下相关参数即可。

对于离线推送,每个第三方移动推送,都会有一个第三方通道,这个第三方通道只能接收在线时的通知和消息。离线消息,只能走厂商通道,这个没得选。

对接文档,每家都有,示例demo也有。但是某些语言可能没有,比如flutter,可能某些第三方正在集成中。如果是使用Flutter开发的移动端,这个第三方移动推送就可以暂不考虑。

看了一下华为的对接demo,单是移动端的对接代码就有数百行,如果再加上其他厂商的,脑补一下对接代码,那绝对有一定的工作量和后期维护量。被第三方集成的,简简单单,加一下配置就可以了,所以还是不建议直接对接厂商。

总结

每个第三方移动推送都会有些概念让新手搞不懂,文档需要反复研读,最好多看几家文档,比对一下,也就明白了。

比如说,从服务器端发送的信息,分两种类型,一种是通知,在手机通知栏展示的,App离线和在线的情况下,手机都需要接收得到的;另一种是消息,是在App在线情况下推送的,无需在通知栏展示,App接收后默默地处理的。

在手机通知栏展示的,有些叫通知,有些叫离线通知。App在线可以接收到的信息,各家又各不相同,有些叫透传消息,有些叫在线消息。

对于离线通知,必须通过厂商推送,每家厂商又各有各的限制,对标题、内容,每部手机接收数量也都是有上限的。既然厂商通道的资源那么宝贵,各种限制,所以对于消息,或者说透传消息,可以考虑走第三方通道。当然,这个达到一定数量,需要向第三方移动推送交费的。

相关文章:

常见的七种加密算法及实现

**数字签名**、**信息加密** 是前后端开发都经常需要使用到的技术,应用场景包括了用户登入、交易、信息通讯、`oauth` 等等,不同的应用场景也会需要使用到不同的签名加密算法,或者需要搭配不一样的 **签名加密算法** 来达到业务目标。这里简单的给大家介绍几种常见的签名加密算法和一些典型场景下的应用。## 正文### 1. 数字签名**数字签名**,简单来说就是通过提供 **可鉴别** 的 **数字信息** 验证 **自身身份** 的一种方式。一套 **数字签名** 通常定义两种 **互补

每天一个摆脱if-else工程师的技巧——优雅的参数校验

在日常的开发工作中,为了程序的健壮性,大部分方法都需要进行入参数据校验。最直接的当然是在相应方法内对数据进行手动校验,但是这样代码里就会有很多冗余繁琐的if-else。throw new IllegalArgumentException("用户姓名不能为空");throw new IllegalArgumentException("性别不能为空");throw new IllegalArgumentException("性别错误");

计算机世界的“十六进制”为什么如此重要

在计算机世界中,十六进制扮演着不可或缺的角色。它以其紧凑的表示形式、与二进制的天然对应关系以及在各个领域的广泛应用,成为了计算机科学中的一把重要工具。总体而言,计算机需要十六进制并非偶然,它是一种为了更好地满足人类理解和处理数据的需求而产生的工具,为计算机科学的发展和应用提供了便利和支持。

面试官:如何实现10亿数据判重?

以 Java 中的 int 为例,来对比观察 BitMap 的优势,在 Java 中,int 类型通常需要 32 位(4 字节*8),而 BitMap 使用 1 位就可以来标识此元素是否存在,所以可以认为 BitMap 占用的空间大小,只有 int 类型的 1/32,所以有大数据量判重时,使用 BitMap 也可以实现。所以数据库去重显然是不行的。而使用集合也是不合适的,因为数据量太大,使用集合会导致内存不够用或内存溢出和 Full GC 频繁等问题,所以此时我们的解决方案通常是采用布隆过滤器来实现判重。

希腊字母表及读音

序号大写小写国际音标中文读音意义1Ααa:lf阿尔法角度;系数2Ββbet贝塔磁通系数;角度;系数3Γγga:m伽马电导系数(小写)4Δδdelt德尔塔变动;密度;屈光度5Εεep`silon伊普西龙对数之基数6Ζζzat截塔系数;方位角;阻抗;相对粘度;原子序数7Ηηeit艾塔磁滞系数;效率(小写)8Θθθit西塔温度;相位角9Ιιaiot约塔

Velocity Engine基础

回到顶部Velocity是一个基于Java的模板引擎,可以通过特定的语法获取在java对象的数据 , 填充到模板中,从而实现界面和java代码的分离!Velocity Template Language (VTL) , 是Velocity 中提供的一种模版语言 , 旨在提供最简单和最干净的方法来将动态内容合并到网页中。简单来说VTL可以将程序中的动态数展示到网页中注释非解析内容 , 引用和指令。

第三方消息推送回调Java app消息推送第三方选择

由于最先集成的是极光,因此根据官方给的推送设备区分方式中,选择了使用标签tag来进行区分管理方式,其接口提供了设置和清理标签, 每次设置会覆盖上次的结果,当然这个需要和极光后台进行交互,是异步返回的。5、由于其接口没有使用免费和付费区分,对于接口的访问没有限制,从使用的情况来看,经常会出现不准的情况,并且设置标签的效果其实是添加,导致业务需要改变标签时,需要先清除在设置,然而接口又经常出问题,导致这部分也是一塌糊涂了;如果想使用不受免费版本限制特性的推送服务,可以联系平台提供的商务对接,购买付费版本。

为什么前后端都需要进行数据校验?

前端和后端各自的数据完整性校验是相辅相成的。前端校验可以提供即时反馈和优化用户体验,减轻后端服务器压力;后端校验是最终的安全防线,确保数据的完整性和一致性。通过前后端的数据完整性校验机制的结合,可以提供更可靠和安全的应用程序。

浏览器兼容video视频播放的多种方法&视频在浏览器播放格式,视频浏览器播放格式演示

对于老版本的IE可以通过HTML5shiv来使不支持HTML5的浏览器支持HTML新标签video和audio标签。主要解决HTML5提出的新的元素不被IE6/IE7/IE8识别,这些新元素不能作为父节点包裹子元素,且不能应用CSS样式。让CSS 样式应用在未知元素只需执行 document.createElement(elementName) 即可实现。html5shiv的工作原理也就是基于此。

抖音直播原理解析-如何在 Web 中播放 FLV 直播流

Media Source Extensions API(MSE)媒体源扩展 API 提供了实现无插件且基于 Web 的流媒体的功能,不同于简单的使用video元素,video元素对于开发者来说完全是一个黑盒,浏览器自己去加载数据,加载完了自己解析,解码再播放,这个过程中开发者无法进行任何操作。利用 MSE API 开发者可以自定义获取流媒体数据并且还可以对数据做一些操作。MSE 的兼容性如下图所示。可以发现 MSE 的兼容性还算可以,IE 11 都支持。

手机的ip地址是固定的吗,每个手机ip地址一样吗?

简单点说,路由器开启了“DHCP功能”,会自动给连接路由器网络的设备自动分配IP地址,这包括有线网络和无线网络;当设备开启了DHCP功能之后,在路由器开启了DHCP功能的前提下,就会自动接收路由器分配的IP地址,不需要用户手动设置静态IP地址,用通俗的话来形容“DHCP”,它可以省去用户手动设置IP地址的过程。

mysql的varchar长度到底能插多少字符?

需要注意:这点和oracle的varchar2不同,oracle是字节数长度,不是字符长度,一个汉字占2个字节,所以长度6最多只能存3个汉字。varchar(6)表示可以插入6个汉字,或6个字母数字,或汉字和字母数字共6个,是表示插入的字符数,不是字节数。看下Oracle的测试:汉字占用2个字节。

mysql开启可以使用IP有权限访问

为实际的IP地址和你想要设置的密码。请小心操作,并确保你了解每个命令的作用。如果你对此有任何疑问,最好咨询经验丰富的数据库管理员。来设置或修改用户的密码。相反,你需要分两步来完成这个过程:首先创建或修改用户,并设置密码;然后授予相应的权限。用户应该能够从指定的内网IP地址访问MySQL服务器。用户已存在并且你只是想更改其密码或允许从另一个地址访问,使用。在MySQL 8.0及更高版本中,语句的语法有所变化。替换为你的内网IP地址,

鸿蒙Harmony-页面路由(router)详解

慢慢理解世界,慢慢更新自己,希望你的每一个昨天,今天,和明天都会很快乐,你知道的,先好起来的从来都不是生活,而是你自己

Spring Boot整合日期转换器(Converter)和拦截器(HandlerInterceptor)

配置文件形式针对框架进行个性化定制,例如:拦截器,类型转化器等等。WebMvcConfigurer配置类其实是。内部的一种配置方式,采用。

苹果手机死机怎么重启?iPhone各机型强制重启方法来了!

iPhone手机莫名其妙死机怎么办?苹果手机死机怎么重启?看这里!小编针对不同iPhone机型,为大家提供了苹果手机死机后强制重启的方法。操作都很简单,有需要的朋友快来看看吧!

鸿蒙Harmony-层叠布局(Stack)详解

我们总是为了太多遥不可及的东西去拼命,却忘了人生真正的幸福不过是灯火阑珊处的温暖,柴米油盐的充实,人生无论你赚的钱,是多还是少,经历的事情是好还是坏,都不如过好当下的每一天!

优秀的代码都是如何分层的——阿里开发规范

总的来说业务分层对于代码规范是比较重要,决定着以后的代码是否可复用,是否职责清晰,边界清晰。当然这种分层其实见仁见智, 团队中的所有人的分层习惯也不同,所以很难权衡出一个标准的准则,总的来说只要满足职责逻辑清晰,后续维护容易,就是好的分层。最后,如果你的团队有更好的分层,或者上面所描述的有什么错误的地方还请留言指正一下。

Android Studio点击Run背后发生了什么

当点击Run的时候到底发生了什么呢

Vim 粘贴内容时全变成注释的问题

在使用vim粘贴代码时,会出现注释代码后面的代码全被注释的情况。在paste模式下进行复制粘贴就变得很正常了。

Android 某个应用缺少特殊权限导致系统一直重启解决

系统一些应用会使用到特殊权限,这时候要在系统配置一下否则系统会一直重启。出现该问题的时候,系统一直显示开机Log界面,无法正常进入Android系统界面。下面一起分析总结一下吧。本文不仅正文有学习价值,后续的延伸介绍内容也是有学习价值的。framework 定义的所有 权限都是有定义包含 protectionLevel 等级的,主要等级有:普通,运行时,权限,特殊。

适用于 Windows 的 10 款顶级 PDF 阅读器评测

您是否正在寻找适用于 Windows 台式机或笔记本电脑的可靠且高效的最佳 PDF 阅读器?然后您就打开了正确的文章。在本文中,我提供了有关互联网上一些免费 PDF 阅读器软件的详细信息。我相信读完这篇文章后,您心中将不再有关于免费 PDF 阅读器软件的疑问。

Android Studio 如何设置允许访问网络资源

在 Android 应用中,有时需要访问网络资源,例如从服务器获取数据或者下载文件等。为了保证应用能够正常访问网络资源,需要在 AndroidManifest.xml 文件中添加网络权限。同时,在 Android 9.0 及以上版本中,还需要在代码中进行额外的配置,以确保应用能够正常访问网络资源。本文将介绍如何在 Android Studio 中设置允许访问网络资源。_在android中添加可以访问网络的权限语句

uniapp打包Android、Ios、微信小程序

配置好信息之后我们就可以进行打包了。

共享办公兴起背后:创新引擎或风口浪尖?

这些用户的需求和偏好也各不相同,有的需要灵活的租期和价格,有的需要专业的服务和支持,有的需要丰富的社交和活动,有的需要私密的空间和安全。共享办公的困境,还因为共享办公的市场空间和增长潜力有限,由于共享办公的核心资源是办公场地,而办公场地的供给受到土地、房产、政策等因素的制约,难以大规模扩张。共享办公的困境,其次是共享办公的用户体验和服务质量难以保证,由于共享办公空间的使用者多为中小企业和自由职业者,他们的需求和偏好各不相同,而共享办公空间往往缺乏个性化、智能化、便捷化的服务,难以满足用户的多元化需求。

科普:什么是“东数西算”?

数”指数据,“算”是算力,即对数据的处理能力,“东数西算”是通过构建数据中心、云计算、大数据一体化的新型算力网络体系,将东部算力需求有序引导到西部,优化数据中心建设布局,促进东西部协同联动。简单说就是把东边产生的数据拿到西边来储存,在西边进行数据分析和计算,然后再把结果传到东边。那“东数”为什么要“西算”呢?1.数据的储存和计算是需要大量的设备的,这东西就会占用大量的地,众所周知,东边经济发展的块,这占地成本很高,因此把储存和计算中心放到西部,可以降低成本,增加西部的就业和发展。

ios环境搭建_xcode安装及运行源码

Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由Apple Inc开发。Xcode是开发 macOS 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

Flutter配置Android和IOS允许http访问

Android和IOS允许http访问

有什么好用的C/C++源代码混淆工具?

iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护,防止应用程序中的代码及资源文件被恶意篡改。Ipa Guard通过修改 ipa 文件中的 macho 文件中二进制数据(代码模块配置)进行操作,无需源码。不限定开发技术平台。支持oc,swift,cocos2d-x、unity3d、quick-cocos,html5 ,react native等等各种开发技术。

解决 Hbuilder打包 Apk pad 无法横屏 以及 H5 直接打包 成Apk

下面是创建app 项目 wap站首页地址 可以配置 你H5的登录页 也可以是 你的index 页面 然后 会有一些 配置 你可以去百度 manifest.json 这个 配置文件 配置一下 就可以了 很方便 打包后直接 可以安装 到手机上。如果 你有自己的H5 也可以 自己去创建一个空壳 只需要 加上你 H5的请求地址 就可以了。当然 你的 H5前提是做了 自适应 不然 样式会很丑的。下面是manifest.json 配置文件。