1. 程式人生 > >騰訊信鴿推送Java服務端

騰訊信鴿推送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 表示成功,其他為失敗