为了实现将数据推送到App端,本文介绍如何基于极光推送(JPush)完成相关功能。以下是所需依赖和工具类代码的整理。
在 pom.xml 中添加以下依赖:
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jiguang-common</artifactId>
<version>1.0.8</version>
</dependency>
以下是工具类代码示例:
import java.util.Map;
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.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
public class JPushUtil {
private static final String APP_KEY = "";
private static final String MASTER_SECRET = "";
private static final JPushClient client = new JPushClient(MASTER_SECRET, APP_KEY);
public static int pushToSingleDevice(String deviceId, String title, String msgTitle, String msgContent, Map extras) {
try {
PushPayload payload = buildPushPayloadForDevice(deviceId, title, msgTitle, msgContent, extras);
PushResult result = client.sendPush(payload);
return result.getResponseCode() == 200 ? 1 : 0;
} catch (APIConnectionException | APIRequestException e) {
e.printStackTrace();
}
return 0;
}
public static int pushToAllAndroidUsers(String title, String msgTitle, String msgContent, String extras) {
try {
PushPayload payload = buildPushPayloadForAndroid(title, msgTitle, msgContent, extras);
PushResult result = client.sendPush(payload);
return result.getResponseCode() == 200 ? 1 : 0;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public static int pushToAllIosUsers(String title, String msgTitle, String msgContent, String extras) {
try {
PushPayload payload = buildPushPayloadForIos(title, msgTitle, msgContent, extras);
PushResult result = client.sendPush(payload);
return result.getResponseCode() == 200 ? 1 : 0;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
public static int pushToAllUsers(String title, String msgTitle, String msgContent, String extras) {
try {
PushPayload payload = buildPushPayloadForAllPlatforms(title, msgTitle, msgContent, extras);
PushResult result = client.sendPush(payload);
return result.getResponseCode() == 200 ? 1 : 0;
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
private static PushPayload buildPushPayloadForAllPlatforms(String title, String msgTitle, String msgContent, String extras) {
return PushPayload.newBuilder()
.setPlatform(Platform.all())
.setAudience(Audience.all())
.setNotification(Notification.newBuilder()
.setAlert(title)
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(title)
.setTitle(title)
.addExtra("androidExtras", extras)
.build())
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(title)
.incrBadge(1)
.setSound("default")
.addExtra("iosExtras", extras)
.build())
.build())
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("messageExtras", extras)
.build())
.setOptions(Options.newBuilder()
.setApnsProduction(false)
.setTimeToLive(86400)
.build())
.build();
}
private static PushPayload buildPushPayloadForDevice(String deviceId, String title, String msgTitle, String msgContent, Map extras) {
return PushPayload.newBuilder()
.setPlatform(Platform.all())
.setAudience(Audience.alias(deviceId))
.setNotification(Notification.newBuilder()
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(title)
.setTitle(title)
.addExtras(extras)
.build())
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(title)
.incrBadge(1)
.setSound("default")
.addExtras(extras)
.build())
.build())
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtras(extras)
.build())
.setOptions(Options.newBuilder()
.setApnsProduction(false)
.setTimeToLive(86400)
.build())
.build();
}
private static PushPayload buildPushPayloadForAndroid(String title, String msgTitle, String msgContent, String extras) {
return PushPayload.newBuilder()
.setPlatform(Platform.android())
.setAudience(Audience.all())
.setNotification(Notification.newBuilder()
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(title)
.setTitle(title)
.addExtra("androidExtras", extras)
.build())
.build())
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("messageExtras", extras)
.build())
.setOptions(Options.newBuilder()
.setApnsProduction(false)
.setTimeToLive(86400)
.build())
.build();
}
private static PushPayload buildPushPayloadForIos(String title, String msgTitle, String msgContent, String extras) {
return PushPayload.newBuilder()
.setPlatform(Platform.ios())
.setAudience(Audience.all())
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(title)
.incrBadge(1)
.setSound("default")
.addExtra("iosExtras", extras)
.build())
.build())
.setMessage(Message.newBuilder()
.setMsgContent(msgContent)
.setTitle(msgTitle)
.addExtra("messageExtras", extras)
.build())
.setOptions(Options.newBuilder()
.setApnsProduction(false)
.setTimeToLive(86400)
.build())
.build();
}
}
注意:需要根据实际需求设置 APP_KEY 和 MASTER_SECRET 的值,并调整日志配置。