java+maven整合極光推送服務
阿新 • • 發佈:2019-01-11
最近有不少想寫想記的東西,可惜最近公司太忙,還有就是我比較懶,一到家裡就不行動了。行了,今天主要是整合極光服務的及時通訊功能,直接記下來好了 我的JAVA專案主要是需要整合極光的推送訊息給android的方,所以可能我只會介紹怎麼給極光推送。
第一步你需要到極光的的官網
去註冊賬號
之後建立一個應用
到應用下找到
我們需要的是appkey和secret這兩個ID來進行推送和接收訊息的
接下來就是引包的工作了
<dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>3.2.17</version> </dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jiguang-common</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.6.Final</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency
之後我們需要繼承極光的servlet
package com.bing.Jdpush.Servlet; import javax.servlet.http.HttpServlet; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.bing.Jdpush.Jdpush; import com.sun.org.apache.xml.internal.serializer.utils.Utils; import java.io.IOException; /** * Created by JiangNan on 2018/4/3. */ public class JiGuangServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static final String appKey =""; private static final String masterSecret = ""; private static final String message = "辛勤的老師給你佈置了一點作業,請檢視"; public JiGuangServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Jdpush.testSendPush(appKey,masterSecret,message); System.out.println("sucess"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
之後就是工具類來支援外部呼叫
package com.bing.Jdpush;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
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.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
public class Jdpush {
protected static final Logger LOG = LoggerFactory.getLogger(Jdpush.class);
// demo App defined in resources/jpush-api.conf
public static final String TITLE = "江南";
public static final String ALERT = "祝大家新春快樂";
public static final String MSG_CONTENT = "新春快樂";
public static final String REGISTRATION_ID = "0900e8d85ef";
public static final String TAG = "tag_api";
public static JPushClient jpushClient=null;
public static void testSendPush(String appKey ,String masterSecret,String message) {
jpushClient = new JPushClient(masterSecret, appKey, 3);
// HttpProxy proxy = new HttpProxy("localhost", 3128);
// Can use this https proxy: https://github.com/Exa-Networks/exaproxy
// For push, all you need do is to build PushPayload object.
//PushPayload payload = buildPushObject_all_all_alert();
//生成推送的內容,這裡我們先測試全部推送
PushPayload payload=buildPushObject_android_tag_alertWithTitle(message);
try {
System.out.println(payload.toString());
PushResult result = jpushClient.sendPush(payload);
System.out.println(result+"................................");
LOG.info("Got result - " + result);
} catch (APIConnectionException e) {
LOG.error("Connection error. Should retry later. ", e);
} 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());
}
}
public static PushPayload buildPushObject_all_all_alert() {
return PushPayload.alertAll(ALERT);
}
public static PushPayload buildPushObject_all_alias_alert() {
return PushPayload.newBuilder()
.setPlatform(Platform.all())//設定接受的平臺
.setAudience(Audience.all())//Audience設定為all,說明採用廣播方式推送,所有使用者都可以接收到
.setNotification(Notification.alert("辛勤的老師剛剛為您佈置了一點點作業,請注意查收"))
.build();
}
public static PushPayload buildPushObject_android_tag_alertWithTitle(String message) {
return PushPayload.newBuilder()
.setPlatform(Platform.android())
.setAudience(Audience.all())
.setNotification(Notification.android(message, "JiangNan", null))
.build();
}
public static PushPayload buildPushObject_android_and_ios() {
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.tag("tag1"))
.setNotification(Notification.newBuilder()
.setAlert("alert content")
.addPlatformNotification(AndroidNotification.newBuilder()
.setTitle("Android Title").build())
.addPlatformNotification(IosNotification.newBuilder()
.incrBadge(1)
.addExtra("extra_key", "extra_value").build())
.build())
.build();
}
public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() {
return PushPayload.newBuilder()
.setPlatform(Platform.ios())
.setAudience(Audience.tag_and("tag1", "tag_all"))
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(ALERT)
.setBadge(5)
.setSound("happy")
.addExtra("from", "JPush")
.build())
.build())
.setMessage(Message.content(MSG_CONTENT))
.setOptions(Options.newBuilder()
.setApnsProduction(true)
.build())
.build();
}
public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.newBuilder()
.addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
.addAudienceTarget(AudienceTarget.alias("alias1", "alias2"))
.build())
.setMessage(Message.newBuilder()
.setMsgContent(MSG_CONTENT)
.addExtra("from", "JPush")
.build())
.build();
}
}
在這裡我只呼叫了android的方法 所以我也只修改了
buildPushObject_android_tag_alertWithTitle
這個方法請大家根據自己的情況來進行自由的更改
之後就可以直接根據我們的兩個引數進行訊息的推送了
package com.bing.controller;
import cn.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.PushPayload;
import com.bing.Jdpush.Jdpush;
import com.bing.constant.ErrorEnum;
import com.bing.constant.ResultModel;
import com.bing.util.PropertiesUtil;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* Created by JaingNan on 2018/4/9.
*/
@Controller
@RequestMapping(value = "/Jdpush")
public class JiGuangController {
private static final Log log = LogFactory.getLog(JiGuangController.class);
private static final Gson gson = new GsonBuilder().serializeNulls().create();
private final static String appkey = PropertiesUtil.getPropertiesValue("Jdpush","appkey");
private final static String masterSecret = PropertiesUtil.getPropertiesValue("Jdpush","masterSecret");
private final static String message = PropertiesUtil.getPropertiesValue("Jdpush","message");
/**
* 向所有人推送訊息
* @param
* @return
*/
@RequestMapping(method = RequestMethod.GET, produces = "application/json;charset=UTF-8", value = "/message")
public @ResponseBody String message(String message) {
ResultModel resultModel = new ResultModel();
try{
Jdpush.testSendPush(appkey,masterSecret,message);
resultModel.setError(200);
resultModel.setErrorCode(ErrorEnum.LLB_IM_SUCCESS.getErrCode());
resultModel.setMsg(ErrorEnum.LLB_IM_SUCCESS.getErrMsg());
}catch (Exception e){
resultModel.setError(500);
resultModel.setErrorCode(ErrorEnum.LLB_IN_ERROR.getErrCode());
resultModel.setMsg(ErrorEnum.LLB_IN_ERROR.getErrMsg());
}
return gson.toJson(resultModel);
}
}
在這裡我是聽過工具類的來進行配置檔案讀取的形勢來進行引數的填充,便於後期維護嘛。
工具類
package com.bing.util;
import java.io.InputStream;
import java.util.Properties;
/**
* Created by JiangNan on 2018/4/3.
*/
public class PropertiesUtil {
public static String getPropertiesValue(String fileName, String keyName) {
// 載入配置檔案
Properties props = new Properties();
InputStream in = ResourcePropertiesUtils.class.getResourceAsStream("/"+fileName+".properties");
try {
props.load(in);
} catch (Exception e) {
e.printStackTrace();
}
return props.getProperty(keyName);
}
}
配置檔案(Jdpush.properties)
appkey=you appkey
masterSecret= you masterSecret
message=辛勤的老師給你佈置了一點作業,請檢視!
這樣就可以直接通過GET的形勢進行訪問了