springboot 整合 unipush 个推 实现cid单推、批量推

本文介绍了如何在SpringBoot项目中整合个推UniPush服务,包括开通配置、uniapp获取cid、Springboot集成的详细步骤,如pom文件引入jar包、配置文件设置、个推配置类和消息发送工具类的创建。测试结果显示,无论设备在线或离线,消息都能成功接收。
摘要由CSDN通过智能技术生成

unipush介绍

UniPush是DCloud**联合个推公司**推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌FCM等手机厂商的系统级推送和个推等第三方推送。

国内Android的Push是一个混乱的世界,因为Google的Push服务FCM被墙,所以一些国内的安卓手机厂商各自做了自己的推送,比如华为、小米、OPPO、VIVO、魅族等,但还有很多国产手机厂商没有提供官方推送方案。三方独立公司如个推,则提供了独立的push方案。
在没有uniPush以前,如果只使用三方push,会在很多国产手机上因为节电设置而无法保活push进程,导致无法推送。而如果每个安卓手机的官方Push SDK都集成开发一遍,这么多平台,工作量会非常巨大,管理维护也很麻烦。
uniPush解决了这个难题,开发者只需要开发一次。系统会自动在不同手机上选择最可靠的推送通道发送push消息,保障送达率。

UniPush即**降低了开发成本、又提高了push送达率,并且免费**,是当前推送的最佳解决方案。

开通配置

  • 参考uniPush使用指南
    在这里插入图片描述

uniapp获取cid

getCID() {
	let cid = ''

	// #ifdef APP-PLUS
	let pinf = plus.push.getClientInfo();
	cid = pinf.clientid;
	// #endif
	return cid
}

可将cid作为参数传递给后台与用户进行绑定.

Springboot集成

pom文件引入相关jar包

 <!-- https://mvnrepository.com/artifact/com.getui.push/restful-sdk -->
    <dependency>
        <groupId>com.getui.push</groupId>
        <artifactId>restful-sdk</artifactId>
        <version>1.0.0.1</version>
    </dependency>

yml配置文件配置appId等信息

push:
  appId: ****
  appKey: ******
  masterSecret: ******

对应值见DCloud开发者中心, [https://dev.dcloud.net.cn/app/index?type=0?appid=&type=0]
(https://dev.dcloud.net.cn/app/index?type=0?appid=&type=0)
也可在Hbuild的unipush 配置中直接跳转到对应应用中。在这里插入图片描述

在这里插入图片描述

个推配置类

package com.wxb.fmms.config;

import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.GtApiConfiguration;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GTPushConfig {
   

    @Value("${push.appId}")
    private String appId;

    @Value("${push.appKey}")
    private String appKey;

    @Value("${push.masterSecret}")
    private String masterSecret;

    @Bean(name = "myApiHelper")
    public ApiHelper apiHelper() {
   
        GtApiConfiguration apiConfiguration = new GtApiConfiguration();
        //填写应用配置
        apiConfiguration.setAppId(appId);
        apiConfiguration.setAppKey(appKey);
        apiConfiguration.setMasterSecret(masterSecret);
        // 接口调用前缀,请查看文档: 接口调用规范 -> 接口前缀, 可不填写appId
        //默认为https://restapi.getui.com/v2
        //apiConfiguration.setDomain("https://restapi.getui.com/v2/");
        // 实例化ApiHelper对象,用于创建接口对象
        ApiHelper apiHelper = ApiHelper.build(apiConfiguration);
        return apiHelper;
    }
}

消息发送工具类

package com.zkzh.fmms.common.config;

import com.getui.push.v2.sdk.ApiHelper;
import com.getui.push.v2.sdk.api.PushApi;
import com.getui.push.v2.sdk.common.ApiResult;
import com.getui.push.v2.sdk.dto.req.Audience;
import com.getui.push.v2.sdk.dto.req.AudienceDTO;
import com.getui.push.v2.sdk.dto.req.Settings;
import com.getui.push.v2.sdk.dto.req.Strategy;
import com.getui.push.v2.sdk.dto.req.message.PushChannel;
import com.getui.push.v2.sdk.dto.req.message.PushDTO;
import com.getui.push.v2.sdk.dto.req.message.PushMessage;
import com.getui.push.v2.sdk.dto.req.message.android.AndroidDTO;
import com.getui.push.v2.sdk.dto.req.message.android.ThirdNotification;
import com.getui.push.v2.sdk.dto.req.message.android.Ups;
import com.getui.push.v2.sdk.dto.req.message.ios.Alert;
import com.getui.push.v2.sdk.dto.req.message.ios.Aps;
import com.getui.push.v2.sdk.dto.req.message.ios.IosDTO;
import com.getui.push.v2.sdk.dto.res.TaskIdDTO;
import com.zkzh.common.domin.FebsResponse;
import com.zkzh.common.utils.FebsResponseUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Slf4j
@Component
public class GeTuiUtils {
   
    @Resource(name = "myApiHelper")
    private ApiHelper myApiHelper;

    /**
     * 消息推送(离线推送)单cid推送
     * @param cid
     * @param title
     * @param content
     */
    public FebsResponse pushToSingleByCid(String cid, String title, String content) {
   
        PushDTO<Audience> pushDTO = this.buildPushDTO(title,content);
        // 设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
        audience.addCid(cid);// cid
        // 进行cid单推
        PushApi pushApi = myApiHelper.creatApi(PushApi.class);
        ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByCid(pushDTO);
        if (apiResult.isSuccess()) {
   
            // success
            return FebsResponseUtil.success(apiResult.getMsg(),apiResult.getData());
        } else {
   
            // failed
            return FebsResponseUtil.fail("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
        }
    }

    /**
     * cid批量推
     * @param cidList
     * @param title
     * @param content
     */
    public FebsResponse pushListByCid(List<String> cidList, String title, String content) {
   
        //批量发送
        AudienceDTO audienceDTO = new AudienceDTO();

        PushDTO<Audience> pushDTO = this.buildPushDTO(title,content);

        PushApi pushApi = myApiHelper.creatApi(PushApi.class);
        ApiResult<TaskIdDTO> createApiResult = pushApi.createMsg(pushDTO);
        if (! createApiResult.isSuccess()) {
   
            return FebsResponseUtil.fail("推送:创建消息失败"+createApiResult.getMsg());
        }
        // 设置接收人信息
        Audience audience = new Audience();
        pushDTO.setAudience(audience);
        audience.setCid(cidList);

        audienceDTO.setAudience(audience);
        audienceDTO.setTaskid(createApiResult.
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值