java服务端集成信鸽推送

6 篇文章 0 订阅
1 篇文章 0 订阅

java服务端集成信鸽推送

最近项目需要集成推送功能,突发奇想的选了信鸽推送(可能是最近一直在用阿里的东西),没想到这坑不是一般的多,而且关于详细的集成案例,度娘上真是没一个能入眼的。算了,别的不多说了,上代码吧!

一、注册和生成证书

应用配置

  1. 首先进入信鸽,创建一个应用,然后在控制台点击我的应用:如下图:
    在这里插入图片描述
  2. 点击应用配置,出现应用配置界面:
    在这里插入图片描述
  3. 拿到两个参数APP ID 和 SECRET KEY

二、下载SDK

  • 方法一:使用maven库(推荐)
    • 在项目pom.xml中引入依赖项

	<repositories>
		<repository>
			<id>xingePush</id>
			<url>https://raw.githubusercontent.com/xingePush/maven-repository/snapshot/</url>
		</repository>
	</repositories>
	<dependencies>
		<!--信鸽推送这个版本竟然包涵springfox-swagger2的jar包,集成swagger的兄弟一定得注意别重复引用造成冲突-->
		<dependency>
			<groupId>com.github.xingePush</groupId>
			<artifactId>xinge</artifactId>
			<version>1.2.0-SNAPSHOT</version>
		</dependency>
	</dependencies>

三、JAVA后台集成(以springboot为例,记得按上面步骤导入依赖)

  1. 先创建一个信鸽配置类XinGePushiConfig作为提供XingeApp实例
import cn.stylefeng.guns.core.common.constant.XinGeConstants;
import cn.stylefeng.guns.core.util.PushUtil;
import com.tencent.xinge.XingeApp;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 信鸽推送配置类
 * @author lwh
 * @date 2019/08/01
 */

@Configuration
public class XinGePushiConfig {

    @Bean(name = "androidXingeApp")
    public XingeApp androidXingeApp(){
       return  new XingeApp(XinGeConstants.ANDROID_APP_ID, XinGeConstants.ANDROID_SECRE_KEY);
    }
    @Bean(name = "iosXingeApp")
    public XingeApp iosXingeApp(){
       return  new XingeApp(XinGeConstants.IOS_APP_ID, XinGeConstants.IOS_SECRE_KEY);
    }
}
  1. 创建一个信鸽推送所用的常量集合XinGeConstants,也就是保存我们应用的APP ID 和 SECRET KEY,

public interface XinGeConstants {
	//请正确填写自己应用的APP ID 和 SECRET KEY,一个是安卓应用一个是苹果应用的(下面是乱写的不可用)
    String ANDROID_APP_ID = "88dfgdfgdfg3";
    String ANDROID_SECRE_KEY= "aaa1fgdfgdfgfdgdfgdfg";
    String IOS_APP_ID = "8ddfgdfgdfgdfc13";
    String IOS_SECRE_KEY= "aaa10sdfsdfsdfsdfsd1c867c";
}

  1. 下面是我写的一个工具类PushUtil,里面有单账号推送和账号列表推送和全设备推送的功能实现

import cn.stylefeng.guns.core.common.annotion.BussinessLog;
import cn.stylefeng.guns.core.common.constant.dictmap.DictMap;
import com.alibaba.fastjson.JSON;
import com.tencent.xinge.XingeApp;
import com.tencent.xinge.bean.*;
import com.tencent.xinge.push.app.PushAppRequest;

import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.awt.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
 * 信鸽推送工具类
 * @author  lwh
 * date 2019/08/01
 */
@Component
public class PushUtil {
    private Logger log = LoggerFactory.getLogger(this.getClass());

    @Resource(name = "androidXingeApp")
    private XingeApp androidXingeApp;

    @Resource(name = "iosXingeApp")
    private XingeApp iosXingeApp;

    /**
     * 全平台单账号推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     * @param  account 推送账号
     */
    public boolean pushAccount(String title, String content, String activity,ArrayList<String> account){
        Boolean result=false;
        result=pushAccountAndroid(title,content,activity,account);
        if (!result){
            log.error("安卓平台推送失败>>>>>>>>>>>>>>>>>>>>>>>");
            result=true;
        }
        result=pushAccountIos(title,content,activity,account);
        if (!result){
            log.error("苹果平台推送失败>>>>>>>>>>>>>>>>>>>>>>>");
        }
        return result;
    }

    /**
     * 全平台账号列表推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     * @param  account 推送账号
     */
    public boolean pushAccounts(String title, String content, String activity,ArrayList<String> accounts){
        Boolean result=false;
        result=pushAccountsAndroid(title,content,activity,accounts);
        if (!result){
            log.error("安卓平台推送失败>>>>>>>>>>>>>>>>>>>>>>>");
            result=true;
        }
        result=pushAccountsIos(title,content,activity,accounts);
        if (!result){
            log.error("苹果平台推送失败>>>>>>>>>>>>>>>>>>>>>>>");
        }
        return result;
    }

    /**
     * 全平台全设备推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     * @param  account 推送账号
     */
    public boolean pushAll(String title, String content, String activity){
        Boolean result=false;
        result=pushAllAndroid(title,content,activity);
        if (!result){
            log.error("安卓平台推送失败>>>>>>>>>>>>>>>>>>>>>>>");
            result=true;
        }
        result=pushAllIos(title,content,activity);
        if (!result){
            log.error("苹果平台推送失败>>>>>>>>>>>>>>>>>>>>>>>");
        }
        return result;
    }

    /**
     * 安卓单账号推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     * @param  account 推送账号
     */
    public boolean pushAccountAndroid(String title, String content, String activity,ArrayList<String> account){
        //设置消息体
        Message message= getAndroidMessage(title, content,activity);
        //推送请求信息
        PushAppRequest pushAppRequest = new PushAppRequest();
        //消息体
        pushAppRequest.setMessage(message);
        //消息类型
        pushAppRequest.setMessage_type(MessageType.notify);
        //推送平台
        pushAppRequest.setPlatform(Platform.android);
        //推送目标
        pushAppRequest.setAudience_type(AudienceType.account);
        //推送账号
        pushAppRequest.setAccount_list(account);
        String pushAppRequestStr=pushAppRequest.toString();
        JSONObject resultJson=androidXingeApp.pushApp(pushAppRequestStr);
        boolean result=false;
        String ret_code="";
        try {
            ret_code= resultJson.getString("ret_code");
            if ("0".equals(ret_code)){
                result=true;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }finally {
            log.info(resultJson.toString());
            return result;
        }

    }
    /**
     * 安卓账号列表推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     * @param  accounts 推送账号列表
     */
    public boolean pushAccountsAndroid(String title, String content, String activity,ArrayList<String> accounts){
        //设置消息体
        Message message= getAndroidMessage(title, content,activity);
        //推送请求信息
        PushAppRequest pushAppRequest = new PushAppRequest();
        //消息体
        pushAppRequest.setMessage(message);
        //消息类型
        pushAppRequest.setMessage_type(MessageType.notify);
        //推送平台
        pushAppRequest.setPlatform(Platform.android);
        //推送目标
        pushAppRequest.setAudience_type(AudienceType.account_list);
        //推送账号
        pushAppRequest.setAccount_list(accounts);
        String pushAppRequestStr=pushAppRequest.toString();
        JSONObject resultJson=androidXingeApp.pushApp(pushAppRequestStr);
        boolean result=false;
        String ret_code="";
        try {
            ret_code= resultJson.getString("ret_code");
            if ("0".equals(ret_code)){
                result=true;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }finally {
            log.info(resultJson.toString());
            return result;
        }
    }

    /**
     * 安卓全平台推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     */
    public boolean pushAllAndroid(String title, String content, String activity){
        //设置消息体
        Message message= getAndroidMessage(title, content,activity);
        //推送请求信息
        PushAppRequest pushAppRequest = new PushAppRequest();
        //消息体
        pushAppRequest.setMessage(message);
        //消息类型
        pushAppRequest.setMessage_type(MessageType.notify);
        //推送平台
        pushAppRequest.setPlatform(Platform.android);
        //推送全部
        pushAppRequest.setAudience_type(AudienceType.all);
        String pushAppRequestStr=pushAppRequest.toString();
        //推送,并返回回馈信息
        JSONObject resultJson=androidXingeApp.pushApp(pushAppRequestStr);
        boolean result=false;
        String ret_code="";
        try {
            ret_code= resultJson.getString("ret_code");
            if ("0".equals(ret_code)){//回馈信息中ret_code为0.则表示推送成功
                result=true;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }finally {
            log.info(resultJson.toString());
            return result;
        }
    }

    /**
     * iOS全单账号推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     */
    public boolean pushAccountIos(String title, String content, String activity,ArrayList<String> account){
        //设置消息体
        Message message=getIosMessage(title,content,activity);
        //推送请求信息
        PushAppRequest pushAppRequest = new PushAppRequest();
        //消息体
        pushAppRequest.setMessage(message);
        //消息类型
        pushAppRequest.setMessage_type(MessageType.notify);
        //推送平台
        pushAppRequest.setPlatform(Platform.ios);
        //推送目标
        pushAppRequest.setAudience_type(AudienceType.account);
        //推送账号
        pushAppRequest.setAccount_list(account);
        String pushAppRequestStr=pushAppRequest.toString();
        //推送,并返回回馈信息
        JSONObject resultJson=iosXingeApp.pushApp(pushAppRequestStr);

        boolean result=false;
        String ret_code="";
        try {
            ret_code= resultJson.getString("ret_code");
            if ("0".equals(ret_code)){//回馈信息中ret_code为0.则表示推送成功
                result=true;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }finally {
            log.info(resultJson.toString());
            return result;
        }
    }

    /**
     * iOS账号列表推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     */
    public boolean pushAccountsIos(String title, String content, String activity,ArrayList<String> accounts){
        //设置消息体
        Message message=getIosMessage(title,content,activity);
        //推送请求信息
        PushAppRequest pushAppRequest = new PushAppRequest();
        //消息体
        pushAppRequest.setMessage(message);
        //消息类型
        pushAppRequest.setMessage_type(MessageType.notify);
        //推送平台
        pushAppRequest.setPlatform(Platform.ios);
        //推送目标
        pushAppRequest.setAudience_type(AudienceType.account_list);
        //推送账号
        pushAppRequest.setAccount_list(accounts);
        String pushAppRequestStr=pushAppRequest.toString();
        //推送,并返回回馈信息
        JSONObject resultJson=iosXingeApp.pushApp(pushAppRequestStr);

        boolean result=false;
        String ret_code="";
        try {
            ret_code= resultJson.getString("ret_code");
            if ("0".equals(ret_code)){//回馈信息中ret_code为0.则表示推送成功
                result=true;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }finally {
            log.info(resultJson.toString());
            return result;
        }
    }

    /**
     * iOS全平台推送
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     */
    public boolean pushAllIos(String title, String content, String activity){
        //设置消息体
        Message message=getIosMessage(title,content,activity);
        //推送请求信息
        PushAppRequest pushAppRequest = new PushAppRequest();
        //消息体
        pushAppRequest.setMessage(message);
        //消息类型
        pushAppRequest.setMessage_type(MessageType.notify);
        //推送平台
        pushAppRequest.setPlatform(Platform.ios);
        //推送全部
        pushAppRequest.setAudience_type(AudienceType.all);
        String pushAppRequestStr=pushAppRequest.toString();
        //推送,并返回回馈信息
        JSONObject resultJson=iosXingeApp.pushApp(pushAppRequestStr);

        boolean result=false;
        String ret_code="";
        try {
            ret_code= resultJson.getString("ret_code");
            if ("0".equals(ret_code)){//回馈信息中ret_code为0.则表示推送成功
                result=true;
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }finally {
            log.info(resultJson.toString());
            return result;
        }
    }

    /**
     * 设置并返回安卓消息体
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     */
    public Message getAndroidMessage(String title, String content, String activit){
        //安卓消息设置
        MessageAndroid messageAndroid=new MessageAndroid();

        //消息点击动作设置
        ClickAction clickAction=new ClickAction();
        clickAction.setAction_type(1);
        clickAction.setActivity(activit);

        //点击动作加入消息设置
        messageAndroid.setAction(clickAction);

        //推送消息其他参数设置
        messageAndroid.setBuilder_id(0);
        messageAndroid.setRing(1);
        messageAndroid.setVibrate(1);
        messageAndroid.setClearable(1);
        messageAndroid.setN_id(0);
        messageAndroid.setLights(1);
        messageAndroid.setIcon_type(0);
        messageAndroid.setStyle_id(1);

        //封装推送消息
        Message message = new Message();
        message.setTitle(title);
        message.setContent(content);
        message.setAndroid(messageAndroid);
        return message;
    }

    /**
     * 设置并返回ios消息体
     * @param title 推送标题
     * @param content 推送内容
     * @param activity 点击动作
     */
    public Message getIosMessage(String title, String content, String activit){
        //ios消息设置
        MessageIOS messageIOS=new MessageIOS();
        //苹果推送服务(APNs)特有的消息体字段
        Aps aps=new Aps();
        //标题和消息内容
        Alert alert=new Alert();
        alert.setBody(content);
        alert.setTitle(title);
        aps.setAlert(alert);
        aps.setCategory("INVITE_CATEGORY");
        aps.setBadge_type(5);
        messageIOS.setAps(aps);
        messageIOS.setCustom("bar");

        //封装推送消息
        Message message = new Message();
        message.setTitle(title);
        message.setContent(content);
        message.setIos(messageIOS);
        return message;
    }
}

  1. 再附上我的测试类
import cn.stylefeng.guns.base.BaseJunit;
import cn.stylefeng.guns.core.util.PushUtil;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.lang.reflect.Array;
import java.util.ArrayList;

/**
 * 用户测试
 *
 * @author lwh
 * @date 2019-07-27 17:05
 */
public class PushTest extends BaseJunit {

    @Autowired
    private PushUtil pushUtil;

    @Test
    public void pushTest(){
//        ArrayList<String> acc=new ArrayList<>();
//        acc.add("10000000000");

        pushUtil.pushAll("ios推送测试","ios推送测试,ios与android","com.jwhdzkj.palmnetwork.xgdemo.MessageActivity");

    }

}

如果移动端APP已经集成了SDK那么这样就可以往移动端推送消息了

假如移动端还没有开发完成,那么就是信鸽控制台添加测试设备测试吧
现在最新的包是1.2.0的包,记得一定要下载最新的包,强烈推荐用在项目pom.xml中引入依赖项方式下载,要不可能会出现一些不可预料的问题。那就是官网的包和maven仓拿到的有点区别,真是太坑了!

有啥问题请多多指教,大家互相讨论才进步更快嘛,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值