當前位置:歷史故事大全網 - 歷史天氣 - jpush推送java後臺怎麽調用

jpush推送java後臺怎麽調用

原創作品,可以轉載,但是請標註出處地址blogs.com/V1haoge/p/6439313.html

Java後臺實現極光推送有兩種方式,壹種是使用極光推送官方提供的推送請求API:/v3/push,另壹種則是使用官方提供的第三方Java SDK,這裏先進行第壹種方式推送的實現代碼:

import?org.apache./v3/push";

private?boolean?apns_production?=?true;

private?int?time_to_live?=?86400;

private?static?final?String?ALERT?=?"推送信息";

/**

*?極光推送

*/

public?void?jiguangPush(){

String?alias?=?"123456";//聲明別名

try{

String?result?=?push(pushUrl,alias,ALERT,appKey,masterSecret,apns_production,time_to_live);

JSONObject?resData?=?JSONObject.fromObject(result);

if(resData.containsKey("error")){

log.info("針對別名為"?+?alias?+?"的信息推送失敗!");

JSONObject?error?=?JSONObject.fromObject(resData.get("error"));

log.info("錯誤信息為:"?+?error.get("message").toString());

}

log.info("針對別名為"?+?alias?+?"的信息推送成功!");

}catch(Exception?e){

log.error("針對別名為"?+?alias?+?"的信息推送失敗!",e);

}

}

/**

*?組裝極光推送專用json串

*?@param?alias

*?@param?alert

*?@return?json

*/

public?static?JSONObject?generateJson(String?alias,String?alert,boolean?apns_production,int?time_to_live){

JSONObject?json?=?new?JSONObject();

JSONArray?platform?=?new?JSONArray();//平臺

platform.add("android");

platform.add("ios");

JSONObject?audience?=?new?JSONObject();//推送目標

JSONArray?alias1?=?new?JSONArray();

alias1.add(alias);

audience.put("alias",?alias1);

JSONObject?notification?=?new?JSONObject();//通知內容

JSONObject?android?=?new?JSONObject();//android通知內容

android.put("alert",?alert);

android.put("builder_id",?1);

JSONObject?android_extras?=?new?JSONObject();//android額外參數

android_extras.put("type",?"infomation");

android.put("extras",?android_extras);

JSONObject?ios?=?new?JSONObject();//ios通知內容

ios.put("alert",?alert);

ios.put("sound",?"default");

ios.put("badge",?"+1");

JSONObject?ios_extras?=?new?JSONObject();//ios額外參數

ios_extras.put("type",?"infomation");

ios.put("extras",?ios_extras);

notification.put("android",?android);

notification.put("ios",?ios);

JSONObject?options?=?new?JSONObject();//設置參數

options.put("time_to_live",?Integer.valueOf(time_to_live));

options.put("apns_production",?apns_production);

json.put("platform",?platform);

json.put("audience",?audience);

json.put("notification",?notification);

json.put("options",?options);

return?json;

}

/**

*?推送方法-調用極光API

*?@param?reqUrl

*?@param?alias

*?@param?alert

*?@return?result

*/

public?static?String?push(String?reqUrl,String?alias,String?alert,String?appKey,String?masterSecret,boolean?apns_production,int?time_to_live){

String?base64_auth_string?=?encryptBASE64(appKey?+?":"?+?masterSecret);

String?authorization?=?"Basic?"?+?base64_auth_string;

return?sendPostRequest(reqUrl,generateJson(alias,alert,apns_production,time_to_live).toString(),"UTF-8",authorization);

}

/**

*?發送Post請求(json格式)

*?@param?reqURL

*?@param?data

*?@param?encodeCharset

*?@param?authorization

*?@return?result

*/

@SuppressWarnings({?"resource"?})

public?static?String?sendPostRequest(String?reqURL,?String?data,?String?encodeCharset,String?authorization){

HttpPost?.jiguang.common.ClientConfig;

import?cn.jiguang.common.resp.APIConnectionException;

import?cn.jiguang.common.resp.APIRequestException;

import?cn.jpush.api.JPushClient;

import?cn.jpush.api.push.PushResult;

import?cn.jpush.api.push.model.Options;

import?cn.jpush.api.push.model.Platform;

import?cn.jpush.api.push.model.PushPayload;

import?cn.jpush.api.push.model.audience.Audience;

import?cn.jpush.api.push.model.notification.AndroidNotification;

import?cn.jpush.api.push.model.notification.IosNotification;

import?cn.jpush.api.push.model.notification.Notification;

/**

*?java後臺極光推送方式二:使用Java?SDK

*/

@SuppressWarnings({?"deprecation",?"restriction"?})

public?class?JiguangPush?{

private?static?final?Logger?log?=?LoggerFactory.getLogger(JiguangPush.class);

private?static?String?masterSecret?=?"xxxxxxxxxxxxxxxxx";

private?static?String?appKey?=?"xxxxxxxxxxxxxxxx";

private?static?final?String?ALERT?=?"推送信息";

/**

*?極光推送

*/

public?void?jiguangPush(){

String?alias?=?"123456";//聲明別名

log.info("對別名"?+?alias?+?"的用戶推送信息");

PushResult?result?=?push(String.valueOf(alias),ALERT);

if(result?!=?null?&&?result.isResultOK()){

log.info("針對別名"?+?alias?+?"的信息推送成功!");

}else{

log.info("針對別名"?+?alias?+?"的信息推送失敗!");

}

}

/**

*?生成極光推送對象PushPayload(采用java?SDK)

*?@param?alias

*?@param?alert

*?@return?PushPayload

*/

public?static?PushPayload?buildPushObject_android_ios_alias_alert(String?alias,String?alert){

return?PushPayload.newBuilder()

.setPlatform(Platform.android_ios())

.setAudience(Audience.alias(alias))

.setNotification(Notification.newBuilder()

.addPlatformNotification(AndroidNotification.newBuilder()

.addExtra("type",?"infomation")

.setAlert(alert)

.build())

.addPlatformNotification(IosNotification.newBuilder()

.addExtra("type",?"infomation")

.setAlert(alert)

.build())

.build())

.setOptions(Options.newBuilder()

.setApnsProduction(false)//true-推送生產環境?false-推送開發環境(測試使用參數)

.setTimeToLive(90)//消息在JPush服務器的失效時間(測試使用參數)

.build())

.build();

}

/**

*?極光推送方法(采用java?SDK)

*?@param?alias

*?@param?alert

*?@return?PushResult

*/

public?static?PushResult?push(String?alias,String?alert){

ClientConfig?clientConfig?=?ClientConfig.getInstance();

JPushClient?jpushClient?=?new?JPushClient(masterSecret,?appKey,?null,?clientConfig);

PushPayload?payload?=?buildPushObject_android_ios_alias_alert(alias,alert);

try?{

return?jpushClient.sendPush(payload);

}?catch?(APIConnectionException?e)?{

log.error("Connection?error.?Should?retry?later.?",?e);

return?null;

}?catch?(APIRequestException?e)?{

log.error("Error?response?from?JPush?server.?Should?review?and?fix?it.?",?e);

log.info("HTTP?Status:?"?+?e.getStatus());

log.info("Error?Code:?"?+?e.getErrorCode());

log.info("Error?Message:?"?+?e.getErrorMessage());

log.info("Msg?ID:?"?+?e.getMsgId());

return?null;

}

}

}

可以看出使用Java SDK實現推送的方式很簡單,代碼量也少,理解起來也不難,官方提供的SDK中講很多內容都實現了,我們只是需要配置壹下信息,然後發起推送即可。需要註意的是使用第二種方式,需要導入極光官網提供的jar包。

直接在maven中的pom文件中加入:

<dependency>

<groupId>cn.jpush.api</groupId>

<artifactId>jpush-client</artifactId>

<version>3.2.15</version>

</dependency>  註意:在這裏極有可能會出現jar包沖突:具體哪個包我也忘記了,好像是個日誌包,妳找到後刪除即可。

原本我們項目中也是采用第二種方式實現的,但是最後在提交代碼時發現壹個問題,那就是雖然我們只是帶入了官網提供的那三個jar包,但是最後壹統計,竟然無緣無故增多了80+個jar包,如此多的jar包提交過於臃腫,而且不現實,所以才臨時改變方案,采用第壹種方式進行編碼。

代碼中采用的是別名方式進行推送,需要在在手機APP端進行別名設置,最好就是在用戶登錄之後就設置好,這樣只要用戶登錄壹次,它的綁定別名就可以保存到極光服務器,而我們推送時,指定這個別名,就能將信息推送到對應用戶的手機上。

其實我們發起推送請求,只是將信息發送到了極光服務器之上,這個信息有壹個保存時限,默認壹天,只要用戶登錄手機APP,極光服務器就會將信息自動推送到對應別名的手機上,由此可見,信息並非由我們後天直接推送到手機,而是通過極光服務器這個中轉站,而這正式極光的工作。

  註意:這裏告知壹個技巧,這個別名設置的時候,其實直接將用戶ID設置為別名即可,既方便,又安全,不用再去想辦法生成壹個唯壹的串來進行標識,甚至需要在後臺數據庫中用戶表中新增字段。

  • 上一篇:有哪些光伏外貿網站?或者是太陽能行業網站。
  • 下一篇:標準工時制和綜合工時制的區別
  • copyright 2024歷史故事大全網