使用极光推送向安卓/IOS发送消息
这里介绍使用服务器端,向客户端发送消息。如果你是安卓开发者,这里的内容可能并不适合你。
准备
首先进入官网注册账号,需要邮箱激活后才能使用。
官网:https://www.jiguang.cn/
gtihub:https://github.com/jpush/jpush-api-java-client (有例子和说明,可以下载源码)
登陆账号后,我们创建应用,如下图
创建完成后(应用名称可以随便写,图标可以不上传。因为我们仅仅是测试使用),我们可以在应用信息中看到AppKey 与 Master Secret 后面会用到
我们在推送设置中,输入包名,找到对应的系统,可以下载app,这样有助于我们做i测试。如下图
安卓下载安装后,如下图
这样我们的环境算是好了,接下来就是集成到自己的项目中即可。
安装
maven 方式
将下边的依赖条件放到你项目的 maven pom.xml 文件里。v3.3.10 为例,最新版本请看Release页面
下面的jar包,如果在自己的项目中存在,就不要添加了,如果不存在,添加上即可。
<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>
<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>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<!-- For log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
jar 包方式
请到 Release页面下载相应版本的发布包。
依赖包
jiguang-java-client-common / 极光 Java client 的公共封装开发包,必须依赖
slf4j / log4j (Logger)
gson (Google JSON Utils)
如果使用 Maven 构建项目,则需要在你的项目 pom.xml 里增加
如果不使用 Maven 构建项目,则项目 libs/ 目录下有依赖的 jar 可复制到你的项目里去。
推送例子
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.IosNotification;
import cn.jpush.api.push.model.notification.Notification;
import com.alibaba.fastjson.JSON;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: haohaowang
*/
public class Jpush {
protected static final String appKey ="xxxxxxxxxxx";//填写上面注册时让记住的信息
protected static final String masterSecret = "xxxxxxxxxxxxxxxxxx";//填写上面注册时让记住的信息
public static void sendClient(Map<String, String> parm) {
//创建JPushClient(极光推送的实例)
System.out.println("发送的到的参数为>>>:" + parm.toString());
JPushClient jpushClient = new JPushClient(masterSecret, appKey);
//推送的关键,构造一个payload
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.android_ios())//指定平台的用户
.setAudience(Audience.aliasAudience.all())//指定你要发给谁
.setNotification(Notification.alert(parm.get("alert")))//消息的通知方式
.setOptions(Options.newBuilder().setApnsProduction(false).build())//设置控制选项
.setMessage(Message.content(JSON.toJSONString(parm)))//消息内容
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Map<String, String> pram = new HashMap<>();
pram.put("status","success");//传给安卓的参数
pram.put("code","1");//这些内容无关紧要,根据自己的业务,进行传递即可。
pram.put("alert","审核通过提醒!");//alert指的是到安卓通知栏的标题
pram.put("content","xxx订单已经审核成功,审核通过提醒!");
Jpush.sendClient(pram);
}
}
到这里其实就可以使用了,打开下载的安卓app,我们就可以运行main,就可以收到了。
参数介绍
1 设置推送平台
setPlatform(Platform.all()) //设置所有平台
setPlatform(Platform.android())//设置android
setPlatform(Platform.android_ios())//设置Android和iOS
setPlatform(Platform.ios())//设置iOS
2 设置消息接收者(收到推送消息的人群)
我们的消息分为三类,一类是通知消息,给所有人。另一类是具体的工作安排,给某一部门的人就是给某一类人发送。还有一类是具体的个人消息,如给领导发请假通知等。所以我们最终决定使用的方式包括一下方式:
广播:顾名思义就是给所有人群发消息
别名(alias):给指定id的终端设备发送消息。别名需要客户端进行设置。指的是给个人
标签(tag):分组发送消息,理解起来应该类似于微信建了一个群聊的赶脚。标签需要客户端进行设置
setAudience(Audience.all())设置所有受众
setAudience(Audience.tag("tag1","tag2"))//设置tag为tag1,tag2的受众,群发
.setAudience(Audience.alias("参数")) 设置别名alias为alias1,alias2的受众,单发 。
// setAudience(AudienceTarget.alias("alias1", "alias2")) // 设置别名alias为alias1,alias2的受众,单发 。这里版本有改动。
注: 更多的发送方式,可以到官网上去找文档,可以这是多个条件混合发送。由于本项目中没有那么复杂的应用需求,所以此处省略不提
3 设置通知方式
setNotification(Notification.alert(ALERT)) //设置通用通知,以alert方式提醒,ALERT指的是自己设置的内容
setNotification(Notification.android(ALERT, TITLE, null))//增加标题
setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(ALERT)
.setBadge(5)
.setSound("happy")
.addExtra("from", "JPush")
.build())
.build())//不管什么东西,iOS的总要复杂一些。
注: 可以不设置通知方式,让其使用默认的通知方式进行消息推送
4 设置通知内容
setMessage(Message.content(MSG_CONTENT))//MSG_CONTENT中就是通知内容
。
5 设置控制选项
setOptions()
当前包含如下几个可选项:
sendno int 可选 推送序号 纯粹用来作为 API 调用标识,API 返回时被原样返回,以方便 API 调用方匹配请求与返回。
time_to_live int 可选 离线消息保留时长 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到。
override_msg_id long 可选 要覆盖的消息ID 如果当前的推送要覆盖之前的一条推送,这里填写前一条推送的 msg_id 就会产生覆盖效果,即:1)该 msg_id 离线收到的消息是覆盖后的内容;2)即使该 msg_id Android 端用户已经收到,如果通知栏还未清除,则新的消息内容会覆盖之前这条通知;覆盖功能起作用的时限是:1 天。 如果在覆盖指定时限内该 msg_id 不存在,则返回 1003 错误,提示不是一次有效的消息覆盖操作,当前的消息不会被推送。
apns_production boolean 可选 APNs是否生产环境 True 表示推送生产环境,False 表示要推送开发环境; 如果不指定则为推送生产环境。
注:JPush 官方 API LIbrary (SDK) 默认设置为推送 “开发环境”。
big_push_duration int 可选 定速推送时长(分钟) 又名缓慢推送,把原本尽可能快的推送速度,降低下来,在给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为 1440。未设置则不是定速推送。
6 开始推送
sendPush(PushPayload类型参数)
7 获取返回结果
PushResult类型参数,可以获取到返回值。结果大致格式如下:
{"msg_id":54043218744357965,"sendno":745358581,"statusCode":0}
参考博客;https://blog.csdn.net/weixin_40461281/article/details/80969989