首先在个推官网上申请账号,里面有java的SDK和教程、
服务端代码:
pom.xml配置:
<!--移动端消息推送(个推)start-->
<dependency>
<groupId>com.gexin.platform</groupId>
<artifactId>gexin-rp-sdk-base</artifactId>
<version>4.0.0.22</version>
</dependency>
<dependency>
<groupId>com.gexin.platform</groupId>
<artifactId>gexin-rp-sdk-http</artifactId>
<version>4.0.1.17</version>
</dependency>
<dependency>
<groupId>com.gexin.platform</groupId>
<artifactId>gexin-rp-sdk-template</artifactId>
<version>4.0.0.16</version>
</dependency>
<dependency>
<groupId>com.gexin</groupId>
<artifactId>gexin-rp-fastjson</artifactId>
<version>1.0.0.1</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>2.5.0</version>
</dependency>
<!--移动端消息推送(个推)end-->
jar包从个推官网上下载后放到自己的manve仓库在中
java代码:
package com.elink.base.util;
import com.elink.base.entity.Message;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.style.Style0;
/**
* Created by nxw on 2018/7/11.
* 移动端消息推送工具类
*/
public class AppPushUtils {
//定义常量, appId、appKey、masterSecret 在"个推控制台"中获得的应用配置
// 由IGetui管理页面生成,是您的应用与SDK通信的标识之一,每个应用都对应一个唯一的AppID
private static String appId = "eAKHYriq2b69NGnAO9CaaA";
// 预先分配的第三方应用对应的Key,是您的应用与SDK通信的标识之一。
private static String appKey = "nfDkSekZq66QrPFgd9Q3r";
// 个推服务端API鉴权码,用于验证调用方合法性。在调用个推服务端API时需要提供。(请妥善保管,避免通道被盗用)
private static String masterSecret = "hcmvRMYo6C7YPSSTO9KuX6";
// 设置通知消息模板
/*
* 1. appId
* 2. appKey
* 3. 要传送到客户端的 msg
* 3.1 标题栏:key = title,
* 3.2 通知栏内容: key = titleText,
* 3.3 穿透内容:key = transText
*/
private static NotificationTemplate getNotifacationTemplate(String appId, String appKey, Message msg){
// 在通知栏显示一条含图标、标题等的通知,用户点击后激活您的应用
NotificationTemplate template = new NotificationTemplate();
// 设置appid,appkey
template.setAppId(appId);
template.setAppkey(appKey);
// 穿透消息设置为,1 强制启动应用
template.setTransmissionType(1);
// 设置穿透内容
System.out.println(msg.getTitle() + "::" + msg.getText() + "::" + msg.getRemark());
template.setTransmissionContent(msg.getRemark());
// 设置style
Style0 style = new Style0();
// 设置通知栏标题和内容
style.setTitle(msg.getTitle());
style.setText(msg.getText());
// 设置通知,响铃、震动、可清除
style.setRing(true);
style.setVibrate(true);
style.setClearable(true);
// 设置
template.setStyle(style);
return template;
}
// 对单个用户推送消息
/*
* 1. cid
* 2. 要传到客户端的 msg
* 2.1 标题栏:key = title,
* 2.2 通知栏内容: key = titleText,
* 2.3 穿透内容:key = transText
*/
public static void sendAppMsg(String cid, Message msg) {
// 代表在个推注册的一个 app,调用该类实例的方法来执行对个推的请求
IGtPush push = new IGtPush(appKey, masterSecret);
// 创建信息模板
NotificationTemplate template = getNotifacationTemplate(appId, appKey, msg);
//定义消息推送方式为,单推
SingleMessage message = new SingleMessage();
// 设置推送消息的内容
message.setData(template);
// 设置推送目标
Target target = new Target();
target.setAppId(appId);
// 设置cid
target.setClientId(cid);
// 获得推送结果
System.out.println("正在推送app消息...");
IPushResult result = push.pushMessageToSingle(message, target);
System.out.println(result.getResponse().toString());
/*
* 1. 失败:{result=sign_error}
* 2. 成功:{result=ok, taskId=OSS-0212_1b7578259b74972b2bba556bb12a9f9a, status=successed_online}
* 3. 异常
*/
}
}
里面的message对象可以根据自己的项目的消息类进行修改。
调用方法:
//添加消息
Message message=new Message();
message.setTableName("eventinfo");
message.setSendName(user.getRealName());
message.setSendTime(new Date());
message.setSendId(user.getId());
message.setRemark("事件上报消息");
message.setTitle("您有一条事件上报消息待处理!");
message.setText(info.getEventName());
message.setCreateTime(new Date());
message.setpId(info.getId());
info.setMsg(message);
info=eventInfoDao.save(info);
List<SysUser> users=info.getRole().getUsers();
for (SysUser u:users) {
if(StringUtils.isNotEmptyObject(u.getCid())){
AppPushUtils.sendAppMsg(u.getCid(),info.getMsg());
}
}
用户的cId通过移动端:
var cId = plus.push.getClientInfo().clientid;
移动端框架使用mui框架
jar包从个推官网上下载后放到自己的manve仓库在中