服务器主动向客户端发送信息机制
服务器主动向客户端发送信息机制
常见的服务器主动向客户端发送信息的机制有:
1 轮询:
客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
优点:后端程序编写比较容易。
缺点:请求中有大半是无用,浪费带宽和服务器资源。
长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。优点:在无消息的情况下不会频繁的请求。缺点:服务器hold连接会消耗资源。实例:WebQQ、Hi网页版、Facebook IM。
2长连接:
长连接(Long-Polling)的服务其客户端是不做轮询的,客户端在发起一次请求后立即挂起,一直到服务器端有更新的时候,服务器才会主动推送信息到客户端。 在服务器端有更新并推送信息过来之前这个周期内,客户端不会有新的多余的请求发生,服务器端对此客户端也啥都不用干,只保留最基本的连接信息,一旦服务器有更新将推送给客户端,客户端将相应的做出处理,处理完后再重新发起下一轮请求。
设置心跳包,对于特定的服务端与客户端来说也需要一定时间间隔的心跳,告诉服务器我还活着,虽然我没干活,也没说话,但是别把我给关了
3 推送:
其实也是长连接的形式
但是长连接的编写比较复杂, 心跳包的设置也根据不同的网络环境有关,并且现在的多平台传输会让服务器与多个平台建立多个长连接,比较耗费资源
因此 推送形式可以较好的解决以上问题
系统级的推送产品:Android上有GCM,iOS上有APNS,WinPhone有MPNS。
第三方也有信鸽,极光, 个推等第三方推送平台
这里介绍两个第三方推送平台
个推平台
该平台可以发送普通的通知栏消息,也可以发送透传消息,还有电子围栏(根据用户的地理位置传推送),以及通过点击消息栏的信息去启动软件或者打开连接,还可以对不同用户分类发送,等等多项功能
android-studio开发根据这个文档:
http://docs.getui.com/mobile/android/androidstudio_maven/
可以很简单的快速的建立起推送
具体的建立流程参考上述的网址,按照网站提示的按步骤操作。
在这里补充一些内容
CID(clientid)是什么
标识每个用户的一个连接ID
可以在Activity创建时或者某些事件时, 建立连接 。然后,发送一个网络请求,将该CID给服务器 并且加上其他标识信息,让服务器可以对该CID进行归类,以便后面用来推送消息给不同的目标用户。
怎么获取CID
1 继承GTIntentService的类中有重写方法onReceiveClientId可以获取
2 也可以 clientID=PushManager.getInstance().getClientid(MapActivity.this);
透传消息怎么获取
继承GTIntentService的类中有重写方法onReceiveMessageData是用于获取透明消息的方法
如果是用推送消息的高级设置,传递透传消息,则要点击了推送体
才会调用该方法
也可以只传透传消息
然后不需要任何操作就能去获得这个透传消息
//可以获取各种信息 如appid taskid messageid PkgName cid
String appid = msg.getAppid();
String taskid = msg.getTaskId();
String messageid = msg.getMessageId();
String pkg = msg.getPkgName();
String cid = msg.getClientId();
//还有传过来的透传消息的内容
byte[] payload = msg.getPayload();
if(payload==null){
Log.e(TAG, "receiver payload = null");
}else{
String data = new String(payload);
Log.d(TAG, "receiver payload = " + data);
try {
// 在这里去通知APP执行相应操作
} catch (Exception e) {
e.printStackTrace();
}
}
遇到的问题:
1 添加SDK的时候,会自动帮你配置一些权限 如果你有这些权限 (如别的功能在Manifest中说明了这个权限)
会报错
Error:Execution failed for task ":app:processDebugManifest".
> Manifest merger failed with multiple errors, see logs
解决:删去重复的权限
2 gradle同步的时候,还可能会说一些 key的错误
解决:就接着按着他的步骤往下配置 后面自然会有key的配置
3 在Activity的Oncreate中直接初始化sdk,没网的时候会直接强退
解决:要加判断才进行连接
4 关了程序 弹不出推送消息并且推送消息的高级设置的透传也不能获取 要打开那个Activity(初始化获取的Service的Activity)才行
现在做的项目暂时没用到,先放着,待填~
极光推送平台参考:
http://blog.csdn.net/weixin_37577039/article/details/79423578
- 上一篇:没有了
- 下一篇:没有了