服务端和客户端(三)

现在进行到服务器端的部分了,我使用最最简单的Servlet来写,重点贴出向GCM发送的代码

(1)在接收Client发送过来的Registration ID,,我使用xml文件存储起来,代码如下:

<pre code_snippet_id="295784" snippet_file_name="blog_20140416_1_1441928" name="code" class="java">package org.push.service;import java.beans.XMLDecoder;import java.beans.XMLEncoder;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.HashMap;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class GetDeviceId extends HttpServlet{private HashMap<String,String> device=new HashMap<String,String>();public static String fileurl="c:\\install\\Sample.xml";public void service(HttpServletRequest request, HttpServletResponse response){String RegistrationID=request.getParameter("deviceId");File file=new File(fileurl);if (file.exists()){XMLDecoder decoder;try {decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream(fileurl)));device=(HashMap)decoder.readObject();decoder.close();} catch (FileNotFoundException e) {e.printStackTrace();}}// to check whether the registrationId was already saved.if (device.containsValue(RegistrationID)){return;}int counter=device.size();device.put("Device"+counter,RegistrationID);// SaveXMLEncoder encoder;try {encoder = new XMLEncoder(new BufferedOutputStream(new FileOutputStream(fileurl)));encoder.writeObject(device);encoder.close();} catch (FileNotFoundException e) {e.printStackTrace();}device.clear();}}(2)然后使用下面这个类,结合从页面输入的内容向GCM服务器发送信息package org.push.service;import java.beans.XMLDecoder;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.HashMap;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.google.android.gcm.server.Message;import com.google.android.gcm.server.Result;import com.google.android.gcm.server.Sender;public class GetInputMessage extends HttpServlet{private static final String apiKey="<span style="font-family:monospace;color:#222222;font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 30px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); display: inline !important; float: none;">AIzaSyCBAMuqv7F1FrHa4FcNA83WjVOTZP1DMPw</span>";private HashMap<String,String> deviceMap=new HashMap<String,String>();public void doPost(HttpServletRequest request,HttpServletResponse response){String title=request.getParameter("title");String content=request.getParameter("content");String device=request.getParameter("device");XMLDecoder decoder;try {decoder = new XMLDecoder(new BufferedInputStream(new FileInputStream(GetDeviceId.fileurl)));deviceMap=(HashMap)decoder.readObject();decoder.close();} catch (FileNotFoundException e) {e.printStackTrace();}if (deviceMap.containsKey(device)){Sender sender=new Sender(apiKey);Message message= new Message.Builder().addData("title",title).addData("content",content).build();Result result=null;try{String deviceId=deviceMap.get(device);result=sender.send(message,deviceId,5);} catch (IOException e){e.printStackTrace();}}}}其中apiKey就是之前我们注册的apiKey,这里稍微说明一下,因为registration ID非常复杂,不利于在页面进行操作,所以我规定,第一个将registration ID发送到服务器的设备命名为“Device0”,第二台设备为“Device1”,以此类推,方面页面进行操作。

(3)发送消息页面,非常简单,如下图所示

但是国内使用Google服务非常不稳定,长期会出现连接超时的报错,所以可以使用Chrome的插件进行测试,我在另一篇文章中有描述

这样就可以简单使用GCM服务了

版权声明:本文为博主原创文章,未经博主允许不得转载。

孑然一身,隐入苍茫自然,自有一种孤独的意味;旅行,

服务端和客户端(三)

相关文章:

你感兴趣的文章:

标签云: