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>
  • 方法二:checkout源代码

    • git clone https://github.com/xingePush/xinge-api-java.git
  • 方法三:下载库文件

    • 在信鸽官网下载最新版本的包
    • 使用时引用XingeApp包即可

三、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 {@Autowiredprivate PushUtil pushUtil;@Testpublic 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仓拿到的有点区别,真是太坑了!

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

java服务端集成信鸽推送相关推荐

  1. java后台与android端集成信鸽推送和华为推送通道

    时间比较紧,并未调试. 需求:后端可以针对指定账号或者列表进行通知栏信息推送,优先使用华为通道.点击通知栏消息打开指定activity 后端版本V3,android sdk 3.2.7 一.后端部分代 ...

  2. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  3. App推送java服务端_小米推送

    目前主流的推送,jpush,友盟,小米等等,楼主这里用的是小米,当然需要先看小米的api 小米提供的服务端api地址:http://dev.xiaomi.com/doc/?p=533#d5e15 客户 ...

  4. java服务端的 极光推送

    项目中用到了极光推送  下面写下笔记 首先引入jar包   下载地址https://docs.jiguang.cn/jpush/resources/(非maven项目的下载地址) <depend ...

  5. java服务端统一消息推送(苹果, 华为, 小米, 极光,vivo)

    1. 引入依赖 <!-- 极光 --> <dependency><groupId>cn.jpush.api</groupId><artifactI ...

  6. sse服务器推送性能,SSE 服务端向客户端推送

    传统的ajax都是由客户端主动去请求,服务端才可以返回数据 而sse是建立一个通道,并且在断线后自动重连,由服务端去推送,不需要客户端去主动请求,只需要建立通道 websocket是双向通信 客户端可 ...

  7. 视频直播源码中关于服务端直播开播推送实现

    在视频直播源码中直播app开播时需向客户推送开播消息通知用户,实现方式如下: 1.申请相应的推送服务三方,如下使用极光推送,获取相应的配置资料,并做好相应的配置 2.推送代码如下: /* 极光推送 * ...

  8. java服务端集成极光消息推送--详细开发步骤

    1.极光推送账号准备 要使用极光消息推送必须先在官方网站上注册账号,并添加应用. 产品介绍:https://docs.jiguang.cn/jpush/guideline/intro/ 注册开发者账号 ...

  9. 详解个推java服务端集成

    随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 一.简介 个推是商用级的移动应用消息推送云服务解决方案,客户端SDK支持Android和iOS两大平台,云端支 ...

最新文章

  1. Chrome开始集成图形识别 API(Shape Detection API)
  2. 单例模式的java实现
  3. Oracle Scheduler - NLS_ENV
  4. java instance变量_java 类方法和实例方法 以及 类变量和实例变量
  5. mysql怎么显示结果窗口_mysql8中窗口函数
  6. Flutter中富文件标签的解决方案
  7. WebStrom 使用淘宝镜像
  8. matlab激活中遇到 matlab2017a license error -8,523错误
  9. matlab图形界面fig文件打开不能编辑
  10. 使用jQuery实现旋转木马效果
  11. phpExcel导出excel文件浏览器一直不会出现下载框
  12. NC91 最长递增子序列
  13. 信噪比(SNR)计算公式的推导
  14. 不同主体的微信小程序相互跳转
  15. 激发波长近红外二区发光量子点,近红外二区(NIR-II)发射波长(1000-1700 nm)
  16. 68个经典励志小故事,让你终身受益[转]
  17. VMware esxcli定时开启虚拟机、维护开机状态
  18. android车载支持格式,DIY自己的安卓车载中控(支持原车协议)
  19. 用Python画一个中国地图
  20. linux 实现仿QQ应用程序

热门文章

  1. 考研数学真题虐你千百遍,学渣教你如何逆袭数学130+
  2. Winodws 网络策略服务器与华为、华三、思科网络设备的结合
  3. 使用FastReport.net 报表在网页上实现打印功能
  4. JS的eval()方法
  5. 南京的书店地图:城市的隐秘花园
  6. Logger日志踩坑
  7. 北信源董事长林皓:“信源豆豆”要做AI+IOT的社交平台
  8. LTE物理传输资源(1)-帧结构和OFDM符号
  9. oracle查询不重复的列,ORACLE查问不重复字段的全部列
  10. 全国计算机技术大赛获奖名单,【大科·数院】荣光数院,满载而归——2019年全国计算机设计大赛省赛成绩斐然...