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!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...