一、前述
上次写了一篇关于极光推送( https://blog.csdn.net/qq_37189624/article/details/87878070 )来推送消息的,但是过于单一,繁琐,使用起来不是很方便,今天发现了一个优化方便的,分享一下
二、代码
package com.gizwits.lease.util;/**
* @author tanxi
* @date 2019/2/26
*/
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.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.notification.Notification;
import com.gizwits.boot.utils.SysConfigUtils;
import com.gizwits.lease.config.CommonSystemConfig;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* @ClassName JpushService$
* @Description TODO 极光推送
* @Author tanxi$
* @Date 2019/2/26 10:44
* @Version 1.0
**/
@Slf4j
@Service
public class JpushService {
/**
* 根据别名推送通知
*/
public boolean pushAlertByAlias(String content, String... alias) {
return pushAlertByAudience(Audience.alias(alias), content);
}
/**
* 根据标签推送通知
*/
public boolean pushAlertByTag(String content, String... tag) {
return pushAlertByAudience(Audience.tag(tag), content);
}
/**
* 根据听众推送通知
*/
public boolean pushAlertByAudience(Audience audience, String content) {
return pushAlertByAudienceAndPlatform(Platform.all(), audience, content);
}
/**
* 根据平台推送消息
*
* @param title 标题
* @param message 具体消息
*/
public boolean pushMessage(String title, String content, Map<String, String> message) {
return pushMessageByPlatform(Platform.all(), title, content, message);
}
/**
* 根据平台推送消息
*
* @param title 标题
* @param message 具体消息
*/
public boolean pushMessageByPlatform(Platform platform, String title, String content, Map<String, String> message) {
return pushMessageByTagAndPlatform(platform, title, content, message);
}
/**
* 根据标签推送消息
*
* @param tag 标签
* @param title 标题
* @param message 具体消息
*/
public boolean pushMessageByTag(String title, String content, Map<String, String> message, String... tag) {
return pushMessageByTagAndPlatform(Platform.all(), title, content, message, tag);
}
/**
* 根据平台和标签推送消息
*
* @param tag 标签
* @param title 标题
* @param message 具体消息
*/
public boolean pushMessageByTagAndPlatform(Platform platform, String title, String content,
Map<String, String> message, String... tag) {
Audience audience = Audience.all();
if (tag.length > 0) {
audience = Audience.tag(tag);
}
PushPayload payload = buildMessagePayload(platform, audience, title, content, message);
return push(payload);
}
/**
* 根据别名推送消息
*
* @param alias 别名
* @param title 标题
* @param content 内容
*/
public boolean pushMessageByAlias(String title, String content, String... alias) {
return pushMessageByAlias(title, content, MapUtils.EMPTY_MAP, alias);
}
/**
* 根据别名推送消息
*
* @param alias 别名
* @param title 标题
* @param message 具体消息
*/
public boolean pushMessageByAlias(String title, String content, Map<String, String> message, String... alias) {
return pushMessageByAliasAndPlatform(Platform.all(), title, content, message, alias);
}
/**
* 根据平台和别名推送消息
*
* @param alias 别名
* @param title 标题
* @param message 具体消息
*/
public boolean pushMessageByAliasAndPlatform(Platform platform, String title, String content,
Map<String, String> message, String... alias) {
Audience audience = Audience.all();
if (alias.length > 0) {
audience = Audience.alias(alias);
}
PushPayload payload = buildMessagePayload(platform, audience, title, content, message);
return push(payload);
}
private PushPayload buildMessagePayload(Platform platform, Audience audience, String title, String content,
Map<String, String> message) {
return PushPayload.newBuilder()
.setPlatform(platform)
.setAudience(audience)
.setMessage(Message.newBuilder()
.setTitle(title)
.setMsgContent(content)
.addExtras(message)
.build())
.setOptions(Options.newBuilder().setApnsProduction(true).build())
.build();
}
/**
* 推送通知给所有用户
*/
public boolean pushAlertToAll(String content) {
return pushAlertByPlatform(Platform.all(), content);
}
/**
* 推送通知给安卓用户
*/
public boolean pushAlertToAndroid(String content) {
return pushAlertByPlatform(Platform.android(), content);
}
/**
* 推送通知给IOS用户
*/
public boolean pushAlertToIOS(String content) {
return pushAlertByPlatform(Platform.ios(), content);
}
/**
* 根据平台推送通知给用户
*/
public boolean pushAlertByPlatform(Platform platform, String content) {
return pushAlertByAudienceAndPlatform(platform, Audience.all(), content);
}
/**
* 根据标签和平台推送通知
*/
public boolean pushAlertByAudienceAndPlatform(Platform platform, Audience audience, String content) {
PushPayload payload = PushPayload.newBuilder()
.setPlatform(platform)
.setAudience(audience)
.setNotification(Notification.alert(content))
.setOptions(Options.newBuilder().setApnsProduction(true).build())
.build();
return push(payload);
}
public boolean push(PushPayload payload) {
CommonSystemConfig commonSystemConfig = SysConfigUtils.get(CommonSystemConfig.class);
String rxJiGuangKey = commonSystemConfig.getRxJiGuangKey();
String rxJiGuangSecret = commonSystemConfig.getRxJiGuangSecret();
try {
JPushClient jPushClient = new JPushClient(rxJiGuangSecret, rxJiGuangKey, null,
ClientConfig.getInstance());
PushResult pushResult = jPushClient.sendPush(payload);
log.info("极光推送结果,ResponseCode:{} ,{}", pushResult.getResponseCode(), pushResult.getOriginalContent());
if (pushResult.isResultOK()) {
return true;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
return false;
}
}
三、总结
本文更新的极光推送,更加实用,简单明了,已经经过项目实战,可用,分享出来