使用第三方推送功能变相实现一些即时通讯操作
2017-04-17 09:46
344 查看
有个需求:
当用户端点击一个按钮申请时,界面上按钮变为 “审核中”
此时,管理端的工作人员点击同意审核后, 用户端的按钮从“审核中”变成”已通过”
这个操作肯定是不能让用户自己去刷新的,否则体验不好
几种常见的解决方案实现原理
1)轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。
2)SMS(Push)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,但这种方式一般用户在经济上很难承受。
3)持久连接(Push)方式:客户端和服务器之间建立长久连接,这样就可以实现消息的及时行和实时性。
第一种太浪费流量和性能,除非没办法,尽量不要使用
第二种基本可以不考虑
使用第三方的长连接服务
介绍:这是最简单的方式,我们可以通过接入极光推送,百度推送,友盟等第三方服务实现长连接,通过接入第三方的API我们可以很方便的接入第三方的长连接,推送服务,但是这种方式定制化程度不太好,如果对长连接服务不是要求特别高,对定制化要求不是很高的话基本可以考虑这种方式(目前主流的App都是使用第三方的长连接服务)
优势:简单,方便
劣势:定制化程度不高
使用NIO等方案实现长连接服务
介绍:通过NIO的方式实现长连接,这种方式对技术要求程度比较高,基本都是通过Java API实现长连接,实现心跳包,实现异常情况的容错等操作,可以说通过NIO实现长连接对技术要求很高,一般如果没有成行的技术方案比建议这么做,就算实现了长连接,后期连接的维护,对电量,流量的损耗等都需要持续的优化。
优势:定制化比较高
劣势:技术要求高,需要持续的维护
使用MINA等第三方框架实现长连接
介绍:MINA是一个第三方的NIO框架,该框架实现了一整套的长连接机制,包括长连接的建立,心跳包的实现,异常机制的容错等。使用MINA实现长连接可以定制化的实现一些特有的功能,并且比NIO方案较为简单,因为其已经封装了一些长连接的特有机制,比如心跳包,容错等。
优势:可定制,较NIO方法简单
劣势:也需要一定的技术储备
我这边的APP已经集成了第三方推送,所以使用了长连接的第一种方法.
思路如下: 服务器向APP发送一个透传消息(可以理解成隐形消息),APP解析这个消息中的字符串, 当flag==1001时,发送一个广播.
另一方面,当用户在 界面上按钮变为 “审核中” 的页面时,在这个页面的activity注册一个BroadcastReceiver ,这是一个动态注册的接受者,然后在这个接受者中处理UI变更的事件
发起广播:
java代码动态注册接受者:
另外要记得在onDestroy中解除绑定
感谢
http://blog.csdn.net/qq_23547831/article/details/51690047
当用户端点击一个按钮申请时,界面上按钮变为 “审核中”
此时,管理端的工作人员点击同意审核后, 用户端的按钮从“审核中”变成”已通过”
这个操作肯定是不能让用户自己去刷新的,否则体验不好
几种常见的解决方案实现原理
1)轮询(Pull)方式:客户端定时向服务器发送询问消息,一旦服务器有变化则立即同步消息。
2)SMS(Push)方式:通过拦截SMS消息并且解析消息内容来了解服务器的命令,但这种方式一般用户在经济上很难承受。
3)持久连接(Push)方式:客户端和服务器之间建立长久连接,这样就可以实现消息的及时行和实时性。
第一种太浪费流量和性能,除非没办法,尽量不要使用
第二种基本可以不考虑
使用第三方的长连接服务
介绍:这是最简单的方式,我们可以通过接入极光推送,百度推送,友盟等第三方服务实现长连接,通过接入第三方的API我们可以很方便的接入第三方的长连接,推送服务,但是这种方式定制化程度不太好,如果对长连接服务不是要求特别高,对定制化要求不是很高的话基本可以考虑这种方式(目前主流的App都是使用第三方的长连接服务)
优势:简单,方便
劣势:定制化程度不高
使用NIO等方案实现长连接服务
介绍:通过NIO的方式实现长连接,这种方式对技术要求程度比较高,基本都是通过Java API实现长连接,实现心跳包,实现异常情况的容错等操作,可以说通过NIO实现长连接对技术要求很高,一般如果没有成行的技术方案比建议这么做,就算实现了长连接,后期连接的维护,对电量,流量的损耗等都需要持续的优化。
优势:定制化比较高
劣势:技术要求高,需要持续的维护
使用MINA等第三方框架实现长连接
介绍:MINA是一个第三方的NIO框架,该框架实现了一整套的长连接机制,包括长连接的建立,心跳包的实现,异常机制的容错等。使用MINA实现长连接可以定制化的实现一些特有的功能,并且比NIO方案较为简单,因为其已经封装了一些长连接的特有机制,比如心跳包,容错等。
优势:可定制,较NIO方法简单
劣势:也需要一定的技术储备
我这边的APP已经集成了第三方推送,所以使用了长连接的第一种方法.
思路如下: 服务器向APP发送一个透传消息(可以理解成隐形消息),APP解析这个消息中的字符串, 当flag==1001时,发送一个广播.
另一方面,当用户在 界面上按钮变为 “审核中” 的页面时,在这个页面的activity注册一个BroadcastReceiver ,这是一个动态注册的接受者,然后在这个接受者中处理UI变更的事件
发起广播:
if (code == 102) { Intent intent = new Intent(KeyUtil.getAction(module)); intent.putExtra("id", data.optString("article_id")); intent.putExtra("status", ConUtil.isUser() ? "3" : "4");// 用户端接到,表示管理员点击确认; mContext.sendBroadcast(intent); }
java代码动态注册接受者:
IntentFilter filter = new IntentFilter(); filter.addAction(KeyUtil.getAction(JPushReceiver.SERVICE_APPOINT)); getActivity().registerReceiver(mReceiver, filter);// 代码注册Receive
private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String id = intent.getStringExtra("id"); String status = intent.getStringExtra("status"); LogUtil.d(id + " " + status); if (TextUtils.isEmpty(id)) { return; } for (String str : groupData) { ArrayList<BookInfo> infos = childData.get(str); if (infos == null) { continue; } for (BookInfo info : infos) { if (info == null || !id.equals(info.id)) { continue; } if ("0".equals(info.status) && "1".equals(status)) { //变更UI } else if ("1".equals(info.status) && "2".equals(status)) { //变更UI } else if ("2".equals(info.status) && "3".equals(status)) { //变更UI } else if ("3".equals(info.status) && "4".equals(status)) { //变更UI } else if ("1".equals(info.status) && "0".equals(status)) { //变更UI } else if ("3".equals(info.status) && "2".equals(status)) { //变更UI } adapter.notifyDataSetChanged(); } } } };
另外要记得在onDestroy中解除绑定
@Override public void onDestroy() { context.unregisterReceiver(mReceiver); super.onDestroy(); }
感谢
http://blog.csdn.net/qq_23547831/article/details/51690047
相关文章推荐
- 使用【百度云推送】第三方SDK实现推送功能具体解释
- 【第三方SDK】使用百度云推送实现推送功能详解
- 使用ShareSDK实现第三方分享和第三方登陆 以及短信验证码的功能 配置的中的一些坑
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- 【第三方SDK】使用ShareSDK实现新浪微博的一键分享功能
- Xftp 与ftp 类似,安全性要较高。java实现操作sftp需要第三方的jar包,本例使用
- 市面上所有号称"虚拟机","防火墙"的实时监控杀毒软件无一不是使用的IFSHOOK技术.但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控.下面给出用VTOOLSD写的代码.也就是所有实时杀毒软件的奥秘.同时,很多拦截文件操作的软件,例如对目录加
- 使用MQTT实现Android推送功能(Android+PHP+rsmb)
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- Asp.NET MVC 中使用 SignalR 实现推送功能
- 下面简单使用Jquery来操作iframe的一些记录,这个使用纯JS也可以实现。
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- 使用JAVA的开源API-JExcelAPI来操作Excel,实现基本的功能
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
- 如何启动使用Win8语音识别功能实现无鼠标语音操作
- 【Android进阶】使用第三方平台 ShareSDK 实现新浪微博的一键分享功能
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能