SpringBoot整合极光推送(广播形式和单独对极光regId发送推送)

1.maven依赖

   <!--极光推送-->
     <dependency>
         <groupId>cn.jpush.api</groupId>
         <artifactId>jpush-client</artifactId>
         <version>3.2.9</version>
     </dependency>

2.设置config

import cn.jpush.api.JPushClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;

/**
 * @authorcxl
 * @desc 极光配置类
 * @date 2019年4月17日15:52:14
 *
 */
@Configuration
@ConfigurationProperties
public class JiGuangConfig {

	/**
	 * 极光官网-个人管理中心-appkey
	 * https://www.jiguang.cn/
	 */
	@Value("${push.appkey}")
	private String appkey;

	/**
	 * 极光官网-个人管理中心-点击查看-secret
	 */
	@Value("${push.secret}")
	private String secret;


	/***
	 * yml配置案例:
	 * push:
	 *   appkey: ed8a79344a04217ee343xxxx
	 *   secret: e2a54e1432bcc7eaee64xxxx
	 */


	private JPushClient jPushClient;

	/**
	 * 推送客户端
	 * @return
	 */
	@PostConstruct
	public void initJPushClient() {
		jPushClient = new JPushClient(secret, appkey);
	}
	
	/**
	 * 获取推送客户端
	 * @return
	 */
	public JPushClient getJPushClient() {
		return jPushClient;
	}

}

在里面设置appKey和SecretKey

3.推送信息实体

/**
 * @author cxl
 * @date 2019年4月17日15:48:37
 * @desc 极光推送信息实体
 */
@Data
public class PushBean {

	// 必填, 通知内容, 内容可以为空字符串,则表示不展示到通知栏。
	private String alert;
	// 可选, 附加信息, 供业务使用。
	private Map<String, String> extras;
	//android专用// 可选, 通知标题	如果指定了,则通知里原来展示 App名称的地方,将展示成这个字段。
	private String title;
	
}

4.两个Service

为了更融合实际业务需求,这里已 接口-impl

接口

/**
 * 极光推送
 * 封装第三方api相关
 * @author cxl
 */
public interface MyJiGuangPushService {

    boolean pushAll(PushBean pushBean);

    boolean pushIos(PushBean pushBean);

    boolean pushIos(PushBean pushBean, String... registids);

    boolean pushAndroid(PushBean pushBean);

    boolean pushAndroid(PushBean pushBean, String... registids);

    boolean sendPush(PushPayload pushPayload);
}

//====================================================================

/**
 * 推送服务
 * 封装业务功能相关
 * @author cxl
 */
public interface JiGuangPushService{

    boolean pushAll(PushBean pushBean);

    boolean pushIos(PushBean pushBean);

    boolean pushIos(PushBean pushBean, String... registids);

    boolean pushAndroid(PushBean pushBean);

    boolean pushAndroid(PushBean pushBean, String... registids);

    String[] checkRegistids(String[] registids);
}

实现类

JiGuangPushService 的实现类

/**
 * 推送服务
 * 封装业务功能相关
 * @author cxl
 */
@Service
public class JiGuangPushServiceImpl implements JiGuangPushService {
	
	/** 一次推送最大数量 (极光限制1000) */
	private static final int max_size = 800;
	
	@Autowired
	private MyJiGuangPushService jPushService;
	
	
	/**
	 * 推送全部, 不支持附加信息
	 * @return
	 */
	@Override
	public boolean pushAll(PushBean pushBean){
		return jPushService.pushAll(pushBean);
	}
	
	/**
	 * 推送全部ios
	 * @return
	 */
	@Override
	public boolean pushIos(PushBean pushBean){
		return jPushService.pushIos(pushBean);
	}
	
	/**
	 * 推送ios 指定id
	 * @return
	 */
	@Override
	public boolean pushIos(PushBean pushBean, String... registids){
		registids = checkRegistids(registids); // 剔除无效registed
		while (registids.length > max_size) { // 每次推送max_size个
			jPushService.pushIos(pushBean, Arrays.copyOfRange(registids, 0, max_size));
			registids = Arrays.copyOfRange(registids, max_size, registids.length);
		}
		return jPushService.pushIos(pushBean, registids);
	}
	
	/**
	 * 推送全部android
	 * @return
	 */
	@Override
	public boolean pushAndroid(PushBean pushBean){
		return jPushService.pushAndroid(pushBean);
	}
	
	/**
	 * 推送android 指定id
	 * @return
	 */
	@Override
	public boolean pushAndroid(PushBean pushBean, String... registids){
		registids = checkRegistids(registids); // 剔除无效registed
		while (registids.length > max_size) { // 每次推送max_size个
			jPushService.pushAndroid(pushBean, Arrays.copyOfRange(registids, 0, max_size));
			registids = Arrays.copyOfRange(registids, max_size, registids.length);
		}
		return jPushService.pushAndroid(pushBean, registids);
	}

	/**
	 * 剔除无效registed
	 * @param registids
	 * @return
	 */
	@Override
	public String[] checkRegistids(String[] registids) {
		List<String> regList = new ArrayList<String>(registids.length);
		for (String registid : registids) {
			if (registid!=null && !"".equals(registid.trim())) {
				regList.add(registid);
			}
		}
		return regList.toArray(new String[0]);
	}
	
}

MyJiGuangPushService 实现类

/**
 * 极光推送
 * 封装第三方api相关
 * @author cxl
 */
@Service
@Slf4j
public class MyJiGuangPushServiceImpl implements MyJiGuangPushService {
	

	@Autowired
	private JiGuangConfig jPushConfig;
	
	
	/**
	 * 广播 (所有平台,所有设备, 不支持附加信息)
	 * @param pushBean 推送内容
	 * @return
	 */
	@Override
	public boolean pushAll(PushBean pushBean){
		return sendPush(PushPayload.newBuilder()
	            .setPlatform(Platform.all())
	            .setAudience(Audience.all())
	            .setNotification(Notification.alert(pushBean.getAlert()))
	            .build());
	}
	
	/**
	 * ios广播
	 * @param pushBean 推送内容
	 * @return
	 */
	@Override
	public boolean pushIos(PushBean pushBean){
		return sendPush(PushPayload.newBuilder()
				.setPlatform(Platform.ios())
				.setAudience(Audience.all())
				.setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras()))
                .build());
	}
	
	/**
	 * ios通过registid推送 (一次推送最多 1000 个)
	 * @param pushBean 推送内容
	 * @param registids 推送id
	 * @return
	 */
	@Override
	public boolean pushIos(PushBean pushBean, String... registids){
		return sendPush(PushPayload.newBuilder()
				.setPlatform(Platform.ios())
				.setAudience(Audience.registrationId(registids))
				.setNotification(Notification.ios(pushBean.getAlert(), pushBean.getExtras()))
				.build());
	}
	
	
	/**
	 * android广播
	 * @param pushBean 推送内容
	 * @return
	 */
	@Override
	public boolean pushAndroid(PushBean pushBean){
		return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.all())
                .setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras()))
                .build());
	}
	
	/**
	 * android通过registid推送 (一次推送最多 1000 个)
	 * @param pushBean 推送内容
	 * @param registids 推送id
	 * @return
	 */
	@Override
	public boolean pushAndroid(PushBean pushBean, String ... registids){
		return sendPush(PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.registrationId(registids))
                .setNotification(Notification.android(pushBean.getAlert(), pushBean.getTitle(), pushBean.getExtras()))
                .build());
	}

	/**
	 * 调用api推送
	 * @param pushPayload 推送实体
	 * @return
	 */
	@Override
	public boolean sendPush(PushPayload pushPayload){
		log.info("发送极光推送请求: {}", pushPayload);
		PushResult result = null;
		try{
			result = jPushConfig.getJPushClient().sendPush(pushPayload);
		} catch (APIConnectionException e) {
			log.error("极光推送连接异常: ", e);
		} catch (APIRequestException e) {
			log.error("极光推送请求异常: ", e);
		}
		if (result!=null && result.isResultOK()) {
			log.info("极光推送请求成功: {}", result);
			return true;
		}else {
			log.info("极光推送请求失败: {}", result);
			return false;
		}
	}
	
}

5.注册应用

1.应用创建

1.添加应用

在这里插入图片描述
进入极光个人中心
在这里插入图片描述
填写基本信息
创建好了
在这里插入图片描述

2.查看Appkey和SecretKey

在这里插入图片描述

3.创建一个安卓应用

在这里插入图片描述
点击填写包名
然后点击保存
在这里插入图片描述
一个应用只能改一次
在这里插入图片描述

在这里插入图片描述
出现二维码了,我们扫描下,然后拿出手机

4.DemoApp安装

在这里插入图片描述
在这里插入图片描述
这个是默认打开的页面
在这里插入图片描述

接着,要点击GET_REGISTRATION_ID按钮
在这里插入图片描述
使他生成RegId
RegId是用户第一次在线注册该程序生成的唯一ID,每次进入程序就会重新生成一个新的

到这里,安卓demo的app就安装完成,下面就开始测试阶段!

6.测试推送

我这里就只测试了安卓,这里别忘记修改yml配置文件里面的key配置

  @Autowired
  private JiGuangPushService service;

1.广播推送

广播推送也就是只要是拥有该appKey下载的安装程序的用户,都会受到信息

   /**
     * 广播
     * @param title
     * @param content
     * @return
     */
    @GetMapping("go/{title}/{content}")
    public boolean test(@PathVariable("title")String title,
                        @PathVariable("content")String content){
        PushBean pushBean = new PushBean();
        pushBean.setTitle(title);
        pushBean.setAlert(content);
        boolean flag = service.pushAndroid(pushBean);
        return flag;
    }

发送请求
在这里插入图片描述
在手机上查看
在这里插入图片描述
发现有了推送信息
点击进去查看
在这里插入图片描述
广播推送就完成了

2.单独对regId去做推送

根据之前的步骤,我们知道了regId(设备对应的唯一极光ID)

   /**
     * 单独对(多个)regId进行推送
     * @param title
     * @param regId
     * @param content
     * @return
     */
    @GetMapping("go/{regId}/{title}/{content}")
    public boolean test(@PathVariable("title")String title,
                        @PathVariable("regId")String regId,
                        @PathVariable("content")String content){
        PushBean pushBean = new PushBean();
        pushBean.setTitle(title);
        pushBean.setAlert(content);
        boolean flag = service.pushAndroid(pushBean, regId);
        return flag;
    }

发送请求
在这里插入图片描述

返回true,打开手机查看
在这里插入图片描述
点击进去查看
在这里插入图片描述
推送IOS也一样的这里就不做演示了,本人亲测可用!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值