社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
简要介绍
极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。
概念1:消息 和 通知
概念2:alias 和 tag
搭建场景
1,注册极光账号,官网:https://www.jiguang.cn/accounts/register,登录后进到极光推送功能
2,创建一个应用
3,创建应用后,获取到AppKey和Master Secret,后面会用到这两个
后台代码推送其实也就是推送给极光的消息推送服务器,再由服务器推送给设备,这就是需要key和密钥的原因了
4,设置极光推送设置,这里这配置android,ios好像还需要配置证书什么的
5,配置Android推送:这里需要注意,需要下载的是apk包,下载zip包的话需要自己打成apk包
6,手机安装上面的官方apk包
7,运行上面那个软件,大概长这样,点击第一个按钮,初始化一下
备注:停止恢复推送功能: 当点击停止推送 "stopPush" 按钮时, 推送手机端就不会再接收推送内容, 当点击恢复推送时, 会将期间积攒的所有推送内容一次性推送到手机中
至此,已经搭建好场景了
集成到springboot
1,springboot项目pom引入依赖
<!-- 极光推送 begin -->
<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>
</dependency>
<!-- 极光推送 end -->
2,创建JPushUtil类,该类中给出了使用与Android和ios的方法,以及两者都适用的方法。
根据实际需要自行封装一些方法方便调用,将创建的AppKey和Master Secret替换一下,或者写到yml里
官方:https://github.com/jpush/jpush-api-java-client
/**
* 极光推送工具类
* Created by DUYU on 2019/1/17.
*/
public class JPushUtil {
// 设置好账号的app_key和masterSecret是必须的
private static String APP_KEY = "fcc67*************ba80d76";
private static String MASTER_SECRET = "a4c45*************cc0";
// 极光推送>>Android
//Map<String, String> parm是我自己传过来的参数,可以自定义参数
public static void jpushAndroid(Map<String, String> parm) {
// 创建JPushClient(极光推送的实例)
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
// 推送的关键,构造一个payload
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.android()) // 指定android平台的用户
.setAudience(Audience.all()) // 你项目中的所有用户
// .setAudience(Audience.alias(parm.get("alias"))) // 设置别名发送,单发,点对点方式
//.setAudience(Audience.tag("tag1")) // 设置按标签发送,相当于群发
// .setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用户
.setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) // 发送内容
.setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())
// apnProduction指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式) 不用设置也没关系
// TimeToLive 两个小时的缓存时间
.setMessage(Message.content(parm.get("msg"))) // 自定义信息
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
System.out.println(pu.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
// 极光推送>>ios
// Map<String, String> parm是我自己传过来的参数,可以自定义参数
public static void jpushIOS(Map<String, String> parm) {
// 创建JPushClient
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.ios()) // ios平台的用户
.setAudience(Audience.all()) // 所有用户
//.setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用户
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(parm.get("msg"))
.setBadge(+1)
.setSound("happy") // 这里是设置提示音(更多可以去官网看看)
.addExtras(parm)
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(false).build())
.setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build()) // 自定义信息
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
System.out.println(pu.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
// 极光推送>>All所有平台
public static void jpushAll(Map<String, String> parm) {
// 创建JPushClient
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
// 创建option
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.all()) // 所有平台的用户
.setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用户
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder() // 发送ios
.setAlert(parm.get("msg")) // 消息体
.setBadge(+1)
.setSound("happy") // ios提示音
.addExtras(parm) // 附加参数
.build())
.addPlatformNotification(AndroidNotification.newBuilder() // 发送android
.addExtras(parm) // 附加参数
.setAlert(parm.get("msg")) // 消息体
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(true).build()) // 指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式)
.setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build()) // 自定义信息
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
System.out.println(pu.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
}
3,测试
public class Test {
public static void main(String[] args) {
// 设置推送参数
// 这里可以自定义推送参数了
Map<String, String> parm = new HashMap<String, String>();
// 设置提示信息,内容是文章标题
parm.put("msg","你知道对我最重要的东西是什么吗?是这句话的第一个字");
parm.put("title","某电商类APP");
parm.put("alias","alias");
JPushUtil.jpushAndroid(parm);
}
}
4,查看极光平台
5,手机端
简析
当采用的是标签或者别名进行推送,需要在在手机APP端(后端也行)进行标签和别名设置,一般是在用户登录之后就设置好,这样只要用户登录,它的绑定别名或者标签就可以保存到极光服务器,而我们推送时,指定这个别名或者标签,就能将信息推送到对应用户的手机上。
其实我们发起推送请求,只是将信息发送到了极光服务器之上,这个信息有一个保存时限,默认一天,只要用户使用手机APP登录系统,极光服务器就会将信息自动推送到对应别名或者标签的手机上,由此可见,信息并非由我们后台直接推送到手机,而是通过极光服务器这个中转站,而这正式极光的工作。
注意:这里告知一个技巧:
官方文档
极光官方文档:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#platform
极光 JPush Java SDK:https://github.com/jpush/jpush-api-java-client
参考来源于:
https://blog.csdn.net/vbirdbest/article/details/88971977#commentBox
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!