java集成信鸽推送
一. 前言:
最近项目又要拓展几个大流程,一直在加班(咦,为什么是又…╥﹏╥…),其中app推送是小熙调研并且实现落地的。趁现在有点闲暇时间记录分享下。
小熙在最初是选定极光推送(下篇分享)的,但由于财务方面,不得不转向调研信鸽推送。
信鸽并未展现出如bat大厂的突出优势,只是借用腾讯大数据用户的数据分析,为用户分组划分标签以及通过人口属性、消费能力、短时兴趣、LBS 信息等数据分析,让开发者可以针对不同用户群体推送不同的内容。
信鸽官网
二. 视图:
展示图:
三. 依赖:
信鸽官网依赖坐标:
<dependency><groupId>com.github.xingePush</groupId><artifactId>xinge</artifactId><version>1.2.4</version></dependency>
四. 配置代码:
- yml配置数据:
# 腾讯信鸽推送, 官方未实现ios和android一起推送,所以有两类 keyxinge:android-appKey: 1580002xxxandroid-masterSecret: cedfb61f4f60074d84xxxxxxxxxios-appKey: 168000xxxxios-masterSecret: 0be4326e1b2a8ea55922dexxxxxxxx# 小熙的应用是上海服务器的,所以访问的上海渠道area-channel-url: https://api.tpns.sh.tencent.com/# 1:dev,0:productenvironment: 1
- 配置文件类:
package com.chengxi.datalom.utils.XinGe;import com.tencent.xinge.XingeApp;import lombok.Data;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;/*** 程熙cjp:https://blog.csdn.net/weixin_41133233* 信鸽推送配置类** @author chengxi* @date 2020-12-10*/@Component@Data@ConfigurationProperties(prefix = "xinge")public class XinGePushConfig {@Value("android-appKey")public String androidAppKey;@Value("android-masterSecret")public String androidMasterSecret;@Value("ios-appKey")private String iosAppKey;@Value("ios-masterSecret")private String iosMasterSecret;@Value("area-channel-url")private String areaChannelUrl;@Value("environment")private String environment;@Bean(name = "androidXinGeApp")public XingeApp androidXinGeApp() throws Exception {return XingeApp.Builder.class.newInstance().appId(androidAppKey).secretKey(androidMasterSecret).domainUrl(areaChannelUrl).build();}@Bean(name = "iosXinGeApp")public XingeApp iosXinGeApp() throws Exception {return XingeApp.Builder.class.newInstance().appId(iosAppKey).secretKey(iosMasterSecret).domainUrl(areaChannelUrl).build();}public String getEnvironmentNum() {return this.environment;}}
- 封装工具类:
package com.crystalshield.mcd.smscenter.util;import com.crystalshield.mcd.smscenter.config.XinGePushConfig;import com.tencent.xinge.XingeApp;import com.tencent.xinge.bean.*;import com.tencent.xinge.bean.ios.Alert;import com.tencent.xinge.bean.ios.Aps;import com.tencent.xinge.push.app.PushAppRequest;import lombok.extern.slf4j.Slf4j;import org.apache.commons.collections4.CollectionUtils;import org.json.JSONException;import org.json.JSONObject;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.annotation.Resource;import java.util.ArrayList;/*** 程熙cjp:https://blog.csdn.net/weixin_41133233* 信鸽推送工具** @author chengxi* @date 2020/12/10 19:38*/@Slf4j@Componentpublic class XinGeUtil {@Resource(name = "androidXinGeApp")private XingeApp androidXinGeApp;@Resource(name = "iosXinGeApp")private XingeApp iosXinGeApp;@Autowiredprivate XinGePushConfig xinGePushConfig;/*** 安卓全平台推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param expandInformation 拓展信息*/public Boolean pushAllAndroid(String title, String content, String activity, Object expandInformation) {return pushAndroidBase(title, content, activity, AudienceType.all, null, expandInformation);}/*** 安卓单账号推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param account 推送账号* @param expandInformation 拓展信息*/public Boolean pushAccountAndroid(String title, String content, String activity, ArrayList<String> account, Object expandInformation) {return pushAndroidBase(title, content, activity, AudienceType.account, account, expandInformation);}/*** 安卓账号列表推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param accountList 推送账号列表* @param expandInformation 拓展信息*/public Boolean pushAccountListAndroid(String title, String content, String activity, ArrayList<String> accountList, Object expandInformation) {return pushAndroidBase(title, content, activity, AudienceType.account_list, accountList, expandInformation);}/*** 安卓基础推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param audienceType 推送类型* @param accountList 推送账号* @param expandInformation 拓展信息*/private Boolean pushAndroidBase(String title, String content, String activity, AudienceType audienceType, ArrayList<String> accountList, Object expandInformation) {// 设置消息体Message message = getAndroidMessage(title, content, activity, expandInformation);// 获取推送请求返回的字符串JSONObject resultJson = androidXinGeApp.pushApp(queryPushAppRequestReturnString(message, Platform.android, audienceType, accountList));// 校验返回信息是否成功return judgeReturnBoolean(resultJson);}/*** iOS单账号推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param account 推送账号* @param expandInformation 拓展信息*/public Boolean pushAccountIos(String title, String content, String activity, ArrayList<String> account, Object expandInformation) {return pushIosBase(title, content, activity, AudienceType.account, account, expandInformation);}/*** iOS账号列表推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param accounts 用户账号集合* @param expandInformation 拓展信息*/public Boolean pushAccountListIos(String title, String content, String activity, ArrayList<String> accounts, Object expandInformation) {return pushIosBase(title, content, activity, AudienceType.account_list, accounts, expandInformation);}/*** iOS全平台推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param expandInformation 拓展信息*/public Boolean pushAllIos(String title, String content, String activity, Object expandInformation) {return pushIosBase(title, content, activity, AudienceType.all, null, expandInformation);}/*** iOS基础推送** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param audienceType 推送类型* @param accountList 推送账号* @param expandInformation 拓展信息*/private Boolean pushIosBase(String title, String content, String activity, AudienceType audienceType, ArrayList<String> accountList, Object expandInformation) {//设置消息体Message message = getIosMessage(title, content, activity, expandInformation);//推送,并返回回馈信息JSONObject resultJson = iosXinGeApp.pushApp(queryPushAppRequestReturnString(message, Platform.ios, audienceType, accountList));return judgeReturnBoolean(resultJson);}/*** 获取校验返回的布尔值** @param resultJson 返回json字符串* @return*/private Boolean judgeReturnBoolean(JSONObject resultJson) {boolean result = false;int ret_code = 1;try {ret_code = resultJson.getInt("ret_code");log.info("[信鸽推送]PushResult result is " + resultJson);return ret_code == 0 ? true : false;} catch (JSONException e) {e.printStackTrace();log.error("[信鸽推送]Connection error. Should retry later. ", e);} finally {log.info(resultJson.toString());}return result;}/*** 获取推送请求返回的字符串(如需特殊操作,请拓展,目前需求为此)** @param message 推送的消息* @param platform 平台类型* @param audienceType 推送类型* @param accountList 推送账号* @return*/private String queryPushAppRequestReturnString(Message message, Platform platform, AudienceType audienceType, ArrayList<String> accountList) {//推送请求信息PushAppRequest pushAppRequest = new PushAppRequest();//推送环境pushAppRequest.setEnvironment(String.valueOf(Environment.dev.getType()).equals(xinGePushConfig.getEnvironment()) ? Environment.dev : Environment.product);//消息体pushAppRequest.setMessage(message);//消息类型pushAppRequest.setMessage_type(MessageType.notify);//推送平台pushAppRequest.setPlatform(platform);//推送目标pushAppRequest.setAudience_type(audienceType);//推送账号if (CollectionUtils.isNotEmpty(accountList)) {pushAppRequest.setAccount_list(accountList);}return pushAppRequest.toString();}/*** 设置并返回安卓消息体(如需特殊操作,请拓展,目前需求为此)** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param expandInformation 拓展信息*/private Message getAndroidMessage(String title, String content, String activity, Object expandInformation) {//安卓消息设置MessageAndroid messageAndroid = new MessageAndroid();//消息点击动作设置ClickAction clickAction = new ClickAction();clickAction.setAction_type(1);clickAction.setActivity(activity);//点击动作加入消息设置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);//添加拓展信息(此信息不直接展示在推送上)messageAndroid.setCustom_content(expandInformation);//封装推送消息Message message = queryMessage(title, content);message.setAndroid(messageAndroid);return message;}/*** 设置并返回ios消息体(如需特殊操作,请拓展,目前需求为此)** @param title 推送标题* @param content 推送内容* @param activity 点击动作* @param expandInformation 拓展信息*/private Message getIosMessage(String title, String content, String activity, Object expandInformation) {//ios消息设置MessageIOS messageIOS = new MessageIOS();//苹果推送服务(APNs)特有的消息体字段Aps aps = new Aps();//标题和消息内容Alert alert = new Alert();alert.setTitle(title);alert.setBody(content);aps.setAlert(alert);aps.setCategory("INVITE_CATEGORY");aps.setBadge_type(5);messageIOS.setAps(aps);//设置拓展信息(此信息不直接展示在推送上)messageIOS.setCustom(expandInformation);//封装推送消息Message message = queryMessage(title, content);message.setIos(messageIOS);return message;}/*** 获取Message** @param title* @param content* @return*/private Message queryMessage(String title, String content) {Message message = new Message();message.setTitle(title);message.setContent(content);return message;}}
五. 示例:
下面试小熙的测试用例:
@Autowiredprivate XinGeUtil xinGeUtil;@Testpublic void testXinGe() throws JSONException {// 这里可以使用项目定义的信鸽传输类,以下只是示例JSONObject jsonObject = new JSONObject();jsonObject.put("userName", "小熙");// 测试单个ios账户System.out.println(xinGeUtil.pushAccountIos("IOS测试标题", "IOS测试内容", "", Lists.newArrayList("13456767890"), null));// 测试批量安卓账户System.out.println(xinGeUtil.pushAccountListAndroid("批量用户的安卓测试标题", "批量用户的安卓测试内容", "", Lists.newArrayList("17601000911","18601980911"), null));// 测试批量安卓账户并且加上拓展字段System.out.println(xinGeUtil.pushAccountListAndroid("批量用户的安卓测试标题", "批量用户的安卓测试内容", "", Lists.newArrayList("17601000911","18601980911"), jsonObject.toString()));}
六. 后语:
到此小熙介绍的,后端java集成就好了,前端集成还需要按照官网流程操作生成对应应用,获取对应key。个人感觉还是极光比较好用些,下篇介绍极光推送。
java集成信鸽推送相关推荐
- java服务端集成信鸽推送
java服务端集成信鸽推送 最近项目需要集成推送功能,突发奇想的选了信鸽推送(可能是最近一直在用阿里的东西),没想到这坑不是一般的多,而且关于详细的集成案例,度娘上真是没一个能入眼的.算了,别的不多说 ...
- java后台与android端集成信鸽推送和华为推送通道
时间比较紧,并未调试. 需求:后端可以针对指定账号或者列表进行通知栏信息推送,优先使用华为通道.点击通知栏消息打开指定activity 后端版本V3,android sdk 3.2.7 一.后端部分代 ...
- android app 集成 信鸽推送
推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客, ...
- java集成华为推送
集成华为推送 这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档. 官方文档地址:https://developer.huawei.com/consumer/cn/service/ ...
- java 集成极光推送
为什么需要推送 现在手机App中,每天都能收到大量的推送,这种推送是让用户了解app最新活动与消息,也是提醒用户参与活动并使用app的一个方法,在app中是必不可少的.公司开发app当然也需要使用一种 ...
- java集成极光推送实现Android的消息推送
1.极光推送的思路就是,每一个app都有一个AppKey和Master Secret,这两个值是唯一的,也就是用来标识App的唯一信息,具体怎么获取,去看极光推送官网文档,这里就不在讲解.我们在极光开 ...
- java集成vivo推送sdk
测试代码块 /*** vivo推送测试类* */ public class Vivo {public static final String ALIAS = "ALIAS";pub ...
- java集成oppo推送sdk
准备工作 1.申请推送服务需要在oppo官网上架自己的app(比较蛋疼),需要一些资料,上架以后app评级为A/B的应用方可申请推送服务,获取到app_key和app_secret. 2.oppo官网 ...
- java集成极光推送(仅仅极光注册Id字段发送)
添加依赖 在pom.xml文件的<dependencies></dependencies>标签中,加入下面依赖,且刷新依赖 <!-- 使用极光推送的jar包 --> ...
- android 信鸽 自动重启,Android简单集成信鸽推送
添加项目的buid.gradle ndk { //选择要添加的对应cpu类型的.so库 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添 ...
最新文章
- php解析QQmv直链,网易云音乐直链解析API源代码^-^
- mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案
- 洛谷 P1129 [ZJOI2007]矩阵游戏 解题报告
- android文件添加一行代码怎么写,Android:以编程方式添加Textview,而不是将文本包装到下一行(示例代码)...
- 征服 Redis + Jedis + Spring (一)—— 配置常规操作(GET SET DEL)
- 41. Element getElementsByTagName() 方法
- 如何解决NDK toolchains出现ABI mips64el-linux-android无法编译问题
- FPGA--串口通信基础知识
- zmap zgrab 使用
- vue axios封装及使用
- linux如何伪装ip,如何伪装你的IP(二)
- C# LISTVIEW实例:文件图标显示
- 举个栗子!Tableau 技巧(183):快速实现部分类别的排序
- 计算机音乐创作心得,理结与悠的作曲入门讲座(心得篇 3-4)
- Github连接不上怎么办?
- python头像变二维码_学了Python之后,美化二维码如此简单
- 中国科学技术大学2021计算机考研分数线,【中国科学技术大学】2021考研复试分数线3月13日已公布!速看!...
- 【OpenCV】双目相机测距及其深度恢复原理及其算法流程
- 华为新人培养计划曝光!(新员工培训就该这么做)
- 英国电信集团、西班牙电话公司和澳洲电讯参与区块链试验