Android 消息 推送简介


文章同步于简书: https://www.jianshu.com/p/c9ef76c86922

概念

即时通讯(Instant Messaging,简称IM),即时通讯一般是基于「TCP/IP」和「UDP」进行通讯的

即时通讯和消息推送区别

这里先简单说下两者区别

  • A → B 消息推送(在APP端,消息推送可以作为即时通讯的补充)
  • A ⇋ B 即时通讯(即时通讯可以理解为有来有回的消息推送)

其实说白了,就是单工和双工的区别

Android消息推送现状
  • Google cloud用不了,Android绿色联盟还没成气候
  • 华为手机(推送SDK靠谱,可以单独对华为手机做适配)
  • 小米手机(推送SDK一般,也可以单独做适配,目前已有最新一版)
  • OPPO手机(目前推送有限制每日峰值,暂不支持IM聊天场景推送)
  • 客户端配合服务端Socket实现(这种最笨,效果随着Android版迭代也越来越差)
第三方推送



  • Netty

  1. 收费

  1. 收费

  1. 主要提供消息推送服务
即时通讯协议

即时通信有哪些协议?

IMPP(Instant Messaging And PresenceProtocol):即时信息和空间协议

PRIM(Presence and Instant Messaging Protocol):空间和即时信息协议

SIP(Session Initialion Protocol):会话发起协议

SIMPLE(SIP for Instant Messaging and Presence Leveraging Extension):SIP扩展协议

XMPP(Extensible Messaging and Presence Protocol):可扩展消息与存在协议,是基于可扩展标记语言(XML)的协议

MQTT:是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案

归纳总结:主要就是XMPP和MQTT协议

PS:
Google的推送C2DM(Cloud to Device Message)就是基于XMPP实现的

AndroidPN也是一个基于XMPP协议的java开源Android push notification实现。它包含了完整的客户端和服务器端

MQTT

这里单独说下MQTT,因为直播需求中要使用它作为IM聊天服务

定义:https://baike.baidu.com/item/MQTT MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输)

特点

  • MQTT 协议支持可靠的传送和即发即弃的传输
  • 它是一种发布/预订协议
  • 它与消息内容没有任何关系
  • 它通过 TCP/IP 运行,TCP/IP 可以提供基本网络连接
  • 它针对消息传送提供三种服务质量

上述所说的3种服务质量

  • “至多一次”:消息根据底层因特网协议网络尽最大努力进行传递。 可能会丢失消息
  • “至少一次”:保证消息抵达,但可能会出现重
  • “刚好一次”:确保只收到一次消息

MQTT之Android实现

  • 项目根目录build.gradle中添加
repositories {
    maven {
        url "https://repo.eclipse.org/content/repositories/paho-releases/"
    }
}
  • 在app目录下的build.gradle中添加
dependencies {
    compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
    compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.1'
}
  • 在AndroidManifest.xml中添加权限
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
  • 在AndroidManifest.xml中添加服务
    <!-- Mqtt服务 -->
    <service android:name="org.eclipse.paho.android.service.MqttService" />
  • 接下来就可以参考如下链接写Demo进行测试了(待完善)
  1. Android开发之MQTT的使用
  2. https://github.com/eclipse/paho.mqtt.java
  3. MQTT 协议基本介绍
安卓推送方案及比较 经常有朋友困扰于Android上面实现推送的技术,希望知道各种方案的优缺点、性能、开发难度等,于是特意写了这篇文章。 方案一: Google官方的服务: 但,通过对比研究发现C2DM机制存在以下缺点: 1)GCM要求Android系统必须是2.2以上的版本,所以对于不少2.2以前的系统没法推送 2)国内服务不稳定。而且不少国内的终端厂商纷纷把Google的服务去掉,替换上自己的。 3)需要用户绑定Google账号,但不少国内用户没有Google账号。 方案二: 利用MQTT协议,broker做代理服务器,但是随着用户的增多这个方案会有问题,因为broker的连接数有上限,到了一定程度后就无法连接了,这也就导致消息很难发送出去。 总之,连接数量有限制。 方案三: 基于XMPP协议,很多人都建议使用这个,谷歌官方的C2DM也是基于XMPP研发的,使用这个方案不会依赖android系统,也不依赖于谷歌服务器。 •XMPP协议比较费电费流量,对当前智能机的消耗太大 •在窄带网络和不稳定的(手机)网络都不是最优的选择。 方案四: 最近新出的一种是APNS,这个也不需要自己架设服务器(可以查看http://www.push-notification.mobi/),很简单,自己不用开发服务端。不过很少有人去用,不是很稳定 主要有以下特点: •快速集成:提供一种比C2DM更加快捷的使用方式,避免各种限制. •无需架设服务器:通过使用"云服务",减少额外服务器负担. •可以同时推送消息到网站页面,android 手机 •耗电少,占用流量少. 第三方服务: 目前也有不少第三方提供了推送服务,由于接入简单、服务比较专业可靠、还提供报表等,不少国内开发者和企业都采用这种方案。比如国外的parse、pubnub,国内的个,都是这类。36kr前段时间有报道,新浪微博就是用的一家叫“个”的第三方服务(有兴趣的朋友可以前往查看 http://www.igetuicom) 特点: •方便,易集成 •没有C2DM中的版本限制和必须用gmail绑定 •云服务,不用架设自己的服务器 •系统稳定、专业,能够承受高并发支持 •简单高效,并且省电
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初心一点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值