- 浏览: 16091 次
最新评论
服务器端发送推送数据
2011年12月26日
由于网络各种原因,直到今天才吧服务端推送消息做好。。
获取的消息如图,在用户不登陆客户端的情况下仍然可以接收到google服务器发送的消息。当然最重要的还是用户在第一次登陆客户端的时 候记录了用户的rid
package com.lxl.C2DM;
import java.util.Map;
import java.util.TreeMap;
import com.lxc.C2DM.http.URLPost;
public class GetAuth {
/**
* @param args
*/
public static void main(String[] args) {
//这个rid是上一篇中获取的
String rid = "APA91bFB6pnMraIPctzydZ7s6_FlWOP77SYhid999V2Q3w72wNs_bDFflXtNtomxdYjCaq5WGKfRITCs7QpbB8ToRmTykBy8Z-G1L70PxC77VpuNNxw8GzpnvU1yKwu_Xi9D_JsIMqSssP9Pk7UJAkkwQfzvBeV1Jw";
String auth = getAUTH();
if(auth == null){
System.out.println("get auth fail!!");
return;
}
Map message = new TreeMap();
message.put("registration_id", rid); //识别手机的ID
message.put("collapse_key", "1"); //消息的类型,同一类型消息只接收最后一条
message.put("data.sender", "shineflag"); //消息以键值对形式出现,可有多个
message.put("data.coins", "1000");
postMessage(auth, message);
}
/**
* 获取验证头,每次获取都是不同的,但我们只要任一个就行了
* @return 验证头(失败为空) 获取权限
*/
public static String getAUTH(){
String url = "https://www.google.com/accounts/ClientLogin";//获取Auth的URL
Map params = new TreeMap();
params.put("accountType","HOSTED_OR_GOOGLE");
params.put("Email","kb47161714@gmail.com");
params.put("Passwd","xl4716171");
params.put("service","ac2dm");
params.put("source","bupt-c2dmdemo-1.0");
String result = URLPost.PostURL(url, params,20*1000);
String [] results = result.split("=");
if(results == null || results.length message){
String url = "https://android.apis.google.com/c2dm/send";//发送推送消息的URL(固定的)
Map header = new TreeMap();
header.put("Authorization","GoogleLogin auth="+auth); //推送消息的证证头
String result = URLPost.PostURL(url, message, header, 20*1000);
return result;
}
}
package com.lxl.C2DM.http;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
/**
* 发送http请求的 工具类
* @author Shineflag
*
*/
public class URLPost {
/**
* 发送http请求
* @param url 请求的地址
* @param params 请求的参数
* @param header htttp头
* @param timeout 超时时间
* @return
*/
public static String PostURL(String url,
Map params, Map header,int timeout) {
String result = null;
HttpClient client = null;
HttpResponse response = null;
HttpPost postRequest = null;
HttpParams httpParams = new BasicHttpParams(); // 创建HttpParams以用来设置HTTP参数(这一部分不是必需的)
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); // 设置连接超时
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); // 设置Socket超时
HttpConnectionParams.setSocketBufferSize(httpParams, 8 * 1024); // Socket数据缓存默认8K
HttpConnectionParams.setTcpNoDelay(httpParams, false);
HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);
HttpClientParams.setRedirecting(httpParams, false);
client = new DefaultHttpClient(httpParams);
try {
// 根据PHP情况设置超时
client.getParams().setParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, timeout);
client.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT,
timeout);
List postParams = getpostParams(params);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
postParams, HTTP.UTF_8);
postRequest = new HttpPost(url);
setHeader(postRequest, header);
postRequest.setEntity(formEntity);
response = client.execute(postRequest);
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
result = EntityUtils.toString(response.getEntity());
System.out.println("result = "+result);
}else{
System.out.println("responseCode ="+responseCode);
}
} catch (MalformedURLException e) {
// 抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串
} catch (ProtocolException e) {
// 协议故障
} catch (ConnectTimeoutException e) {
} catch (IOException e) {
} finally {
}
return result;
}
/**
* 发送http请求
* @param url 请求的地址
* @param params 请求的参数
* @param timeout 超时时间
* @return
*/
public static String PostURL(String url,
Map params, int timeout) {
String result = null;
HttpClient client = null;
HttpResponse response = null;
HttpPost postRequest = null;
HttpParams httpParams = new BasicHttpParams(); // 创建HttpParams以用来设置HTTP参数(这一部分不是必需的)
HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000); // 设置连接超时
HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000); // 设置Socket超时
HttpConnectionParams.setSocketBufferSize(httpParams, 8 * 1024); // Socket数据缓存默认8K
HttpConnectionParams.setTcpNoDelay(httpParams, false);
HttpConnectionParams.setStaleCheckingEnabled(httpParams, false);
HttpClientParams.setRedirecting(httpParams, false);
client = new DefaultHttpClient(httpParams);
try {
// 根据PHP情况设置超时
client.getParams().setParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, timeout);
client.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT,
timeout);
List postParams = getpostParams(params);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(
postParams, HTTP.UTF_8);
postRequest = new HttpPost(url);
postRequest.setEntity(formEntity);
response = client.execute(postRequest);
int responseCode = response.getStatusLine().getStatusCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
result = EntityUtils.toString(response.getEntity());
System.out.println("result = "+result);
}else{
System.out.println("responseCode ="+responseCode);
}
} catch (MalformedURLException e) {
// 抛出这一异常指示出现了错误的 URL。或者在规范字符串中找不到任何合法协议,或者无法分析字符串
} catch (ProtocolException e) {
// 协议故障
} catch (ConnectTimeoutException e) {
} catch (IOException e) {
} catch (Exception e) {
} finally {
}
return result;
}
/**
* 生成请求参数
* @param params
* @return
*/
public static List getpostParams(Map params){
List postParams = new ArrayList(2);
BasicNameValuePair param = null;
for(String key:params.keySet()){
param = new BasicNameValuePair(key, params.get(key));
postParams.add(param);
}
return postParams;
}
/**
* 设置http头
* @param httpPost
* @param header
*/
private static void setHeader(HttpPost httpPost,Map header){
if(httpPost == null || header == null)
return;
for(String key:header.keySet()){
httpPost.addHeader(key, header.get(key));
}
}
}
发表评论
-
高一期中试题
2012-01-20 12:00 794高一期中试题 2012年01月17日 高一年级英语学科( ... -
2012信息技术中考模拟题单选71-140题标准版
2012-01-20 12:00 15292012信息技术中考模拟题单选71-140题标准版 2012 ... -
00000000007
2012-01-20 12:00 77900000000007 2011年10月04日 重要提醒 ... -
巧学宾语从句――宾语从句语法详解 [宾语从句歌诀]
2012-01-20 12:00 1036巧学宾语从句――宾语从句语法详解 [宾语从句歌诀] 2011 ... -
【转】 完型填空复习教案设计
2012-01-20 12:00 755【转】 完型填空复习教案设计 2011年10月01日 完 ... -
VC++日记(非模态,自定义消息,窗体移动……)
2012-01-19 16:49 704VC++日记(非模态,自定义消息,窗体移动……) 2011年 ... -
消息分流器(HANDLE_MSG)
2012-01-19 16:49 644消息分流器(HANDLE_MSG) 20 ... -
【转】 消息分流器-HANDLE_MSG
2012-01-19 16:49 709【转】 消息分流器-HANDLE_MSG 2011年05月3 ... -
处理 WM_NCHITTEST 消息实现 WPF 无边框窗体改变大小和移动
2012-01-19 16:49 2809处理 WM_NCHITTEST 消息实现 WPF 无边框窗体改 ... -
VC添加自定义消息(转)
2012-01-19 16:49 882VC添加自定义消息(转) 2011年04月14日 VC的 ... -
灯饰英语
2012-01-17 06:33 613灯饰英语 2011年12月02日 ... -
sysytem32下的文件及其作用的文章
2012-01-17 06:33 508sysytem32下的文件及其作用的文章 2011年11月2 ... -
Java语言11个主要特性
2012-01-17 06:33 517Java语言11个主要特性 20 ... -
用PHP代码调用sockets,直接用服务器的网络攻击别的IP
2012-01-17 06:33 553用PHP代码调用sockets,直接用服务器的网络攻击别的IP ... -
今天写写小虎队
2012-01-16 05:14 626今天写写小虎队 2009年1 ... -
夜。上海
2012-01-16 05:14 653夜。上海 2009年08月25日 今天突 ... -
超雷人的 山寨版
2012-01-16 05:14 613超雷人的 山寨版 2009年10月27日 原来不仅仅中 ... -
猜猜我是谁语录
2012-01-16 05:14 657猜猜我是谁语录 2010年0 ...
相关推荐
在“DWR3实现服务器端向客户端精确推送消息”这一主题中,我们将深入探讨如何利用DWR3进行服务器到客户端的消息推送,以及这种技术的优势和应用。 首先,理解DWR3的工作原理是至关重要的。DWR3通过建立一个安全的...
3. **服务器集成**:开发者需要在服务器端集成FCM API,使用服务器密钥来发送消息。当有新消息时,服务器会使用FCM接口,将消息与目标设备的令牌关联起来,然后发送到FCM服务器。 4. **消息格式化**:FCM支持多种...
本篇文章将详细介绍一个名为PushSharp的服务器端库,它支持向多种平台的设备发送推送通知,包括iOS、Android、Windows Phone和Windows 8。 1. **PushSharp简介** PushSharp是一个开源的.NET框架,用于方便开发者在...
服务器端推送是极光推送的核心特性,允许开发者通过API接口向目标设备发送消息。在本Demo中,`JPushModel`文件扮演了关键角色,用于配置推送所需的Key和Secret,这是与极光推送服务建立身份验证的凭证。 3. **配置...
标题中的“E4A配合易语言服务器发送推送消息例子源码”揭示了这是一个关于使用E4A(Easy4Android)和易语言开发的服务器端配合实现消息推送的示例项目。这个项目的主要目的是教给开发者如何在Android应用程序中集成...
- **发送推送**:使用JPush API发送推送消息,可以指定目标(如设备ID、别名、标签),并设置消息内容、通知标题和提示音等属性。 - **错误处理**:处理可能的网络错误和推送结果,例如重试机制和错误反馈。 4. *...
5. **错误处理和结果获取**:发送推送请求后,服务器会返回一个结果,包括是否成功、错误信息等。在.NET的Demo中,我们需要捕获并处理这些信息,以便了解推送的效果和可能出现的问题。 6. **统计与分析**:极光推送...
在Web开发中,服务器向客户端实时推送数据是常见的需求,比如聊天应用、股票实时更新、在线游戏等场景。本文将详细探讨如何通过JAVA实现多种服务器推送客户端的方式,包括Ajax轮询、长连接、长轮询以及Iframe刷新。 ...
极光推送主要通过HTTP或HTTPS协议与服务器进行通信,服务器端发送推送请求到极光推送的API接口,然后极光服务会将消息推送到指定的设备上。服务器端代码主要涉及以下几个核心部分: 1. **初始化JPush客户端**:在...
客户端发送16进制给服务端,并行实现socket通道活动状态...netty作为服务器端如何主动的向传感器发送消息,我尝试当每个传感器连接到netty(TCP/IP)时使用一个map把该channelSocket的id和该channelSocket绑定在一起。
在IT行业中,服务器端将数据推送到客户端(浏览器)是一种重要的通信模式,它与传统的HTTP请求-响应模型有所不同。在传统的HTTP模型中,客户端(通常是浏览器)需要主动发起请求来获取服务器上的信息,而服务器推送...
压缩包内的"example"目录可能包含了Java服务器端发送推送的示例代码,而"TestPush2"可能是Android客户端的测试工程,其中readme.txt文件应当详细介绍了如何运行和使用这些示例。请根据文件内容进行实际操作,以便更...
服务器通过发送推送承诺(Push Promise)通知客户端即将推送的资源,从而减少延迟,提高页面加载速度。 在实际应用中,选择哪种服务器推送技术取决于具体需求。例如,如果只需要单向通信并且对延迟要求不高,SSE...
本文将深入探讨如何使用ASP.NET技术来构建iOS推送服务器端代码。 首先,理解APNS的工作原理至关重要。APNS允许应用程序开发者向已安装的应用发送远程通知,即使应用程序不在前台运行也能接收到消息。它通过安全的...
4. 错误处理:在发送推送过程中,需要捕获并处理可能出现的异常,如网络错误、请求超时等,以确保消息发送的稳定性。 5. 高效批量推送:对于大量设备的推送,可以通过批量接口来提高效率,减少服务器的负载。 通过...
本文将深入探讨Android客户端和服务器端的消息推送机制。 首先,我们要了解Android消息推送的常用技术框架,其中最常见的是Google的Firebase Cloud Messaging (FCM),它是Google Cloud Messaging (GCM) 的升级版。...
**百度推送服务器** ...总的来说,百度Push Java SDK为开发者提供了便捷的服务器端推送功能,通过简单的API调用即可实现各种推送需求。正确集成和使用此SDK,可以有效提高应用的用户参与度和活跃度。
8. **批量推送**:为了提高效率,服务器端可以一次发送多个消息,或者将消息分批发送给大量设备。 9. **安全性**:确保消息传输过程中的安全至关重要,尤其是当消息包含敏感信息时。使用HTTPS可以保护数据在传输...
DWR的独特之处在于它的“反转Ajax”(Reverse Ajax)概念,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这在股票实时显示等需要即时更新信息的应用场景中非常有用。 在"股票实时显示"的应用...
5. **发送推送消息** 初始化客户端后,你可以调用其提供的方法来发送构建好的消息。这些方法通常会返回一个任务ID,你可以通过这个ID来追踪消息的发送状态。 6. **处理推送结果** 阿里云推送服务会返回推送的结果...