pom引用
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.4.2</version>
</dependency>
工具类
package com.sxapp.message.utils;
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.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;
import com.alibaba.fastjson.JSON;
import com.sxapp.message.dto.JPushContent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class JPushClientUtil {
private static final Logger log = LoggerFactory.getLogger(JPushClientUtil.class);
@Value("${push.jg.app.key}")
private String appKey;
@Value("${push.jg.master.secret}")
private String masterSecret;
public void sendPushToAlias(List<String> alias, JPushContent jPushContent, String title) {
ClientConfig clientConfig = ClientConfig.getInstance();
JPushClient jPushClient = new JPushClient(masterSecret, appKey, null, clientConfig);
try {
PushResult pushResult = jPushClient.sendPush(PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.alias(alias))
.setNotification(
Notification.newBuilder()
.addPlatformNotification(
AndroidNotification.newBuilder()
.setAlert(title)
.addExtra("extra", JSON.toJSONString(jPushContent))
.build()
)
.addPlatformNotification(
IosNotification.newBuilder()
.setAlert(title)
.setSound("default")
.addExtra("extra", JSON.toJSONString(jPushContent))
.build()
)
.build()
)
.build());
log.info("push result is [{}]", pushResult.toString());
} catch (APIConnectionException | APIRequestException e) {
log.error("push fail! [{}]", e.getMessage());
e.printStackTrace();
}
}
}
异步线程处理
package com.sxapp.message.handler;
import com.sxapp.message.dto.JPushRequest;
import com.sxapp.message.utils.JPushClientUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class JPushHandler implements Runnable {
private static final Logger log = LoggerFactory.getLogger(JPushHandler.class);
private JPushClientUtil jPushClientUtil;
private JPushRequest jPushRequest;
public JPushHandler(JPushClientUtil jPushClientUtil, JPushRequest jPushRequest) {
this.jPushClientUtil = jPushClientUtil;
this.jPushRequest = jPushRequest;
}
@Override
public void run() {
List<String> alias = jPushRequest.getAlias();
int group = alias.size() / 1000;
for (int i = 0; i <= group; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
jPushClientUtil.sendPushToAlias(alias.subList(1000 * i, Math.min(1000 * (i + 1), alias.size())),
jPushRequest.getjPushContent(), jPushRequest.getTitle());
}
}
}
调用
@Resource
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Resource
private JPushClientUtil jPushClientUtil;
public void jPushMessage(JPushRequest jPushRequest) {
threadPoolTaskExecutor.execute(new JPushHandler(jPushClientUtil, jPushRequest));
}