Android C2DM学习 - 服务器端开发

  次阅读 来源:互联网(转载协议) 2015-09-28 15:49 我要评论(0)

一、基础知识

在前一部分,我们使用curl命令来代替了服务器端的实现,虽然在测试时使用curl命令是一个很是简单方便的模拟方式,但实际使用中我们需要把C2DM相关的服务器部分功能结合到已有的框架中,因此需要使用具体的代码来实现。

第三方服务器端部分的功能主要是通过C2DM服务器向客户端发送要推送的数据。

为了发送数据,第三方服务器需要向这个地址https://android.apis.google.com/c2dm/send发送一个POST请求,其中POST的内容包含:

registration_id:是客户端发送过来的registration_id值。必须包含。

collapse_key:一个任意的字符串,用来表示一组相似的消息。当Android设备由离线到上线时,之前使用相同collapse_key推送的消息,只有最后一条才会推送给Android设备。设置这个值用来避免Android设备上线时收到太多已经过时的消息。必须包含。

data.<key>:要推送的数据内容,以键值对的方式组织。当客户端程序接收时,就通过键值<key>来获取对应的内容。一条推送消息中包含的键值对数目没有限制,虽然整体的数据大小有限制。可眩

delay_while_idle:如果包含这项,则表明当Android设备idle时,C2DM服务不会立即把消息推送给设备而是等到设备重新变回active。可眩

Authorization: GoogleLogin auth=[AUTH_TOKEN]:HTTP头部要包含的信息,是为SenderID申请的C2DM(服务代码为ac2dm)服务权限,这个需要提前获龋必须包含。

因此第三方服务器就是构造这样的POST请求,然后向C2DM服务器发送。

在这部分中,我们就使用java代码的方式实现之前使用curl模拟的第三方服务器功能。

二、实例开发

创建一个Java工程,工程名为C2DMMessageServer,新建包名com.ichliebephone.server.c2dmmessage,并新建一个类C2DMMessageServer。

第三方服务器端的和C2DM相关的功能可以分为两个,第一个是获取注册使用C2DM功能的用户账号的ClientLogin权限Auth值;第二个是按格式给C2DM服务器发送要Push的数据。

我们先来看下获取Auth权限的方法实现:

// 获取Auth权限值

public static String getAuthToken(String url, String params) throws IOException{

String auth = null;

// 要POST的数据

byte[] postData = params.getBytes();

// 构造POST请求

URL requestUrl = new URL(url);

HttpURLConnection connection = (HttpURLConnection)requestUrl.openConnection();

connection.setDoOutput(true);

connection.setUseCaches(false);

connection.setRequestMethod("POST");

connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");

connection.setRequestProperty("Content-Length", Integer.toString(postData.length));

// 写入POST数据

OutputStream out = connection.getOutputStream();

out.write(postData);

out.flush();

out.close();

// 获取并处理请求返回的数据

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String responseLine;

StringBuilder responseDataBuidler = new StringBuilder();

while((responseLine=reader.readLine())!=null){

responseDataBuidler.append(responseLine);

}

int responseCode = connection.getResponseCode();

System.out.println("auth responseCode = "+responseCode);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 汤晓鸥:人工智能的中国式文艺复兴

    汤晓鸥:人工智能的中国式文艺复兴

  • 区块链最近太火,但A股多家公司明确表态不考虑涉足

    区块链最近太火,但A股多家公司明确表态不考虑涉足

  • 马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

    马云的新零售?张近东的智慧零售?抑或是刘强东的第四次零售革命?

  • 全球陷入"区块链狂热"潮,大规模应用还需等待

    全球陷入"区块链狂热"潮,大规模应用还需等待

网友点评网友点评
阅读推荐阅读推荐

算法 任何一个入门的软件开发人员都会听到这句话:算法是软件的灵魂!近年来大火的机器学习即是在算法在人工智能上的集中体现。今日头条通...

据《日本经济新闻》报道,日本东京大学教授稻叶雅幸等人开发出再现日本人骨骼肌肉构造的机器人。机器人各部位的肌肉和骨骼长度与日本人的平...

以奥黛丽-赫本为原型打造的人形机器人索菲娅首次拜访了印度。索菲娅是世界上首位获得公民身份的机器人,她在12月30日出现在了印度理工学院...

在查获现场,代售点电脑旁的一台机器人通过敲击电脑键盘抢票。 广州日报惠州讯 (全媒体记者秦仲阳 通讯员张中铃摄影报道)2018年春运售票已...