我们目前做的平台是一整个快递物流体系,包含下单、收件、网点监控物流等多个模块,当用户下单完成后需要通知某一网点下的快递员。
我们最终采用了Jpush(毕竟免费简单),为了不对原有系统表进行修改,和前端商量之后直接通过用户手机号作为Jpush系统的alias,这样可以避免采集设备信息。
流程:用户登录app时,若后台校验成功,返回用户的详细信息给前端,前端立即将用户手机号录入Jpush系统(我们选择alias,也可以用标签),当寄件端有人下单后,后台触发向多人推送通知事件。
jpush开发文档地址:https://docs.jiguang.cn/jpush/server/push/server_overview/
1、pom依赖引入:
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.3.10</version>
</dependency>
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jiguang-common</artifactId>
<version>1.1.4</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</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>
此处要注意log4j相关依赖冲突,如果项目中已经引入日志依赖,需要exclusion冲突的依赖。
2、功能实现:
//Jpush key
private static String jpushKey = "your key";
//Jpush secret
private static String jpushSecret = "your secret";
private static int timeToLive = 60 * 60 * 24;//通知存活时间,设置为24小时
public static void pushNotificationByAddOrder(String[] alias,String message) throws SystemException {
JPushClient jpushClient = new JPushClient(jpushSecret,jpushKey, timeToLive,null);
//push对象创建
PushPayload payload = PushPayload.newBuilder().setPlatform(Platform.all())
.setAudience(Audience.alias(alias))//设置通知对象
.setNotification(Notification.alert(message))//通知种类,可进行自定义
.build();
try {
PushResult result = jpushClient.sendPush(payload);
System.out.println(result.getResponseCode());
} catch (APIConnectionException e) {
// Connection error, should retry later
throw new SystemException(500,"JPush连接出错");
} catch (APIRequestException e) {
throw new SystemException(500,"Jpush请求出错");
}
}
异常捕捉是我自己封装的,目前来说发送通知这一种就够我们使用,我也试了一下自定义的通知推送,没有成功,Jpush后台显示api接口调用成功,但是没有触发推送,还需要再了解一下。