1、推送工具使用html
咱们在作安卓开发的时候,一般须要一些消息推送功能,我我的平时用的是极光推送,极光推送(JPush)是一个端到端的推送服务,使得服务器端消息可以及时地推送到终端用户手机上,让开发者积极地保持与用户的链接,从而提升用户活跃度、提升应用的留存率。极光推送客户端支持 Android, iOS 两个平台。java
使用的时候咱们能够先去官网看开发文档,我是在个人新闻客户端中引用了这个sdk,下载解压以后能够按照步骤作相应操做就能够了,我的感受仍是挺实用的。android
本身按照源码从新作了一个简单的可接收消息的demo,编程
下面给出的是PushReceiver的代码:json
public class PushReceiver extends BroadcastReceiver { private static final String TAG = "PushReceiver"; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Log.d(TAG, "onReceive - " + intent.getAction()); if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent .getAction())) { System.out.println("收到了自定义消息。消息内容是:" + bundle.getString(JPushInterface.EXTRA_MESSAGE)); // 自定义消息不会展现在通知栏,彻底要开发者写代码去处理 } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent .getAction())) { System.out.println("收到了通知"); // 在这里能够作些统计,或者作些其余工做 } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent .getAction())) { System.out.println("用户点击打开了通知"); // 在这里能够本身写代码去定义用户点击后的行为 String extra = bundle.getString(JPushInterface.EXTRA_EXTRA); System.out.println("附加信息:" + extra); try { JSONObject jo = new JSONObject(extra); String url = jo.getString("url"); System.out.println("url:" + url); // 跳浏览器加载网页 } catch (JSONException e) { e.printStackTrace(); } } } }固然,这段代码用了一个自定义消息的功能,能够推送json数据,不仅是推送标题消息哦!全部须要客户端被动接收信息的功能模块,均可以用推送实现
而后用JSONObject jo = new JSONObject(extra);
String url = jo.getString("url");来解析,固然咱们还能够用Gson来解析json数据。浏览器
2、推送原理简介服务器
-xmpp 是一种基于TCP/IP的协议, 这种协议更适合消息发送。七层协议。网络
事实上Google官方的C2DM服务器底层也是采用XMPP协议进行的封装。XMPP(可扩展通信和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终容许因特网用户向因特网上的其余任何人发送即时消息。关于XMPP协议我在上篇博文中已经介绍,你们能够参考下文章:http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
- socket 套接字, 发送和接收网络请求。这个我在大三的时候上网络编程的时候学过,可是当时没有用心学额。socket
咱们知道两个进程若是须要进行通信最基本的一个前提能可以惟一的标示一个进程,在本地进程通信中咱们可使用PID来惟一标示一个进程,但PID只在本地惟一,网络中的两个进程PID冲突概率很大,这时候咱们须要另辟它径了,咱们知道IP层的ip地址能够惟一标示主机,而TCP层协议和端口号能够惟一标示主机的一个进程,这样咱们能够利用ip地址+协议+端口号惟一标示网络中的一个进程。
可以惟一标示网络中的进程后,它们就能够利用socket进行通讯了,什么是socket呢?咱们常常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操做抽象为几个简单的接口供应用层调用已实现进程在网络中通讯。
ide
- 长链接 keep-alive, 服务器基于长链接找到设备,发送消息 -心跳包 , 客户端会定时(30秒一次)向服务器发送一段极短的数据,做为心跳包, 服务器定时收到心跳,证实客户端活着,才会发消息.不然将消息保存起来,等客户端活了以后(从新链接),从新发送.