騰訊信鴿推送Java服務端
結合Servlet、傳遞JSON資料,實現信鴿Java服務端向Android客戶端(參考這裡)推送資料
環境
伺服器:winserver 2012、eclipse、tomcat
客戶端 :Mac、Android Studio
1 Android端與服務端通訊
1.1 服務端
1.1.1 搭建JavaWeb環境
參考:部署tomcat
參考:配置Server
參考:eclipse配置Tomcat
1.1.2 新建專案
服務端新建JavaWeb專案XGServer,新建JsonServlet繼承HttpServlet
package com.Servlet;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLDecoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.tencent.xingeUtil.Demo;
public class JsonServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
request = req;
try {
request.setCharacterEncoding("utf-8");
// 獲取客戶端post請求傳送的Json資料
InputStream inputStream = request.getInputStream();
String json = NetUtils.readString(inputStream);
json = URLDecoder.decode(json, "UTF-8");
System.out.println(json+"111");
} catch (Exception e) {
e.printStackTrace();
}
}
}
配置web.xml
<servlet>
<servlet-name>JsonServlet</servlet-name>
<servlet-class>com.Servlet.JsonServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JsonServlet</servlet-name>
<url-pattern>/JsonServlet</url-pattern>
</servlet-mapping>
這樣通過http://伺服器IP:8080/XGServer/JsonServlet,就能訪問到Servlet
1.2 Android 端
public static void sendJson(String content){
String path="Java端Servlet訪問地址";
JSONObject json=new JSONObject();
HttpURLConnection conn=null;
try {
json.put("客戶端",content);
conn= (HttpURLConnection) new URL(path).openConnection();
conn.setRequestMethod("POST");//post請求
conn.setRequestProperty("ser-Agent", "Fiddler");
conn.setRequestProperty("Content-Type", "application/json");
conn.setConnectTimeout(5 * 1000);
// 包裝並上傳資料
OutputStream outputStream = conn.getOutputStream();
outputStream.write(URLEncoder.encode(json.toString(), "UTF-8").getBytes());
outputStream.flush();
outputStream.close();
if (HttpURLConnection.HTTP_OK == conn.getResponseCode())
Log.i("flag","連線成功");
else
Log.i("flag","連線失敗:"+conn.getResponseCode());
} catch (Exception e) {
e.printStackTrace();
}
finally {
conn.disconnect();
}
}
2 推送訊息
SDK下載選擇JavaSDK。
解壓後:
將PushJavaSDK.Jar複製到服務端的專案XGServer中,Add to Build Path。開啟Demo.java類,裡面封裝了很多方法,分析其中一個方法如下:
在XGServer中也新建一個Demo類
ACCESS ID與SECRET KEY獲取,參考: 騰訊信鴿推送Android端
public class Demo {
private static XingeApp xinge = new XingeApp(ACCESS ID , "SECRET KEY");
//下發單個賬號
public static JSONObject demoPushSingleAccount(String str) {
Message message = new Message();
message.setExpireTime(86400);
message.setTitle("title");
message.setContent("content");
message.setType(Message.TYPE_NOTIFICATION);
Style style = new Style(0,1,1,1,0,1,1,0);
message.setStyle(style);
JSONObject ret = xinge.pushSingleAccount(0, "account", message);
System.out.println(ret);
return ret;
}
}
在JsonServlet中呼叫demoPushSingleAccount方法,便可以向所有賬號為account的裝置傳送推送。
具體API請參考:信鴿服務端Java SDK V1.1.8使用者手冊
下面分析一下XingApp、Message、Style這三個
XingeApp
該類 供與信鴿後臺互動的介面。建構函式有兩個引數,均為必選。
引數名 | 型別 | 必需 | 預設值 | 引數描述 |
---|---|---|---|---|
accessId | int | 是 | 無 | 推送目標應用 id |
secretKey | String | 是 | 無 | 推送金鑰 |
注:secretKey 是後臺介面鑑權的金鑰,accessKey 為客戶端鑑權金鑰。呼叫後臺 sdk 時需要使用 secretKey。 Example:
XingeApp push = new XingeApp(000, "myKey");
Message
定義推送訊息(Android 平臺)
Example:
Message mess = new Message(); mess.setType(Message.TYPE_NOTIFICATION);
mess.setTitle("title");
mess.setContent("中午");
mess.setExpireTime(86400);
Style
定義通知訊息如何展現
Example:
//依次為(int builderId, int ring, int vibrate, int clearable, int nId, int lights, int iconType,
int styleId)
Style style = new Style(0,0,0,1,0,1,0,1);
style.setIconRes("xg.png");
XingeApp.pushSingleAccount
推送訊息給單個賬號
public JSONObject pushSingleAccount(int deviceType, String account, Message message) //向Android客戶端傳送訊息
引數名 | 型別 | 必需 | 預設值 | 引數描述 |
---|---|---|---|---|
deviceType | int | 否 | 0 | 請填0 |
account | string | 是 | 無 | 要與Android端一致,Android端才能收到推送 |
message | Message | 是 | 無 |
Example:
XingeApp push = new XingeApp(000, 'myKey');
Message mess = new Message(); //$mess = new MessageIOS();
//完善 Message 訊息
...
JSONObject ret = push. pushSingleAccount (0, 'nickName', mess);
Return value:
{"ret_code":0} //成功
{"ret_code":-1, "err_msg":"error description"}
注:ret_code 為 0 表示成功,其他為失敗