一. 前言:

最近项目又要拓展几个大流程,一直在加班(咦,为什么是又…╥﹏╥…),其中app推送是小熙调研并且实现落地的。趁现在有点闲暇时间记录分享下。

小熙在最初是选定极光推送(下篇分享)的,但由于财务方面,不得不转向调研信鸽推送。
信鸽并未展现出如bat大厂的突出优势,只是借用腾讯大数据用户的数据分析,为用户分组划分标签以及通过人口属性、消费能力、短时兴趣、LBS 信息等数据分析,让开发者可以针对不同用户群体推送不同的内容。
信鸽官网

二. 视图:

展示图:

三. 依赖:

信鸽官网依赖坐标:

     <dependency><groupId>com.github.xingePush</groupId><artifactId>xinge</artifactId><version>1.2.4</version></dependency>

四. 配置代码:

  1. 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
  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;}}
  1. 封装工具类:
 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集成信鸽推送相关推荐

  1. java服务端集成信鸽推送

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

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

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

  3. android app 集成 信鸽推送

    推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客, ...

  4. java集成华为推送

    集成华为推送 这类推送一般官方文档都比较详细,如果想要更加详细的了解建议查看官方文档. 官方文档地址:https://developer.huawei.com/consumer/cn/service/ ...

  5. java 集成极光推送

    为什么需要推送 现在手机App中,每天都能收到大量的推送,这种推送是让用户了解app最新活动与消息,也是提醒用户参与活动并使用app的一个方法,在app中是必不可少的.公司开发app当然也需要使用一种 ...

  6. java集成极光推送实现Android的消息推送

    1.极光推送的思路就是,每一个app都有一个AppKey和Master Secret,这两个值是唯一的,也就是用来标识App的唯一信息,具体怎么获取,去看极光推送官网文档,这里就不在讲解.我们在极光开 ...

  7. java集成vivo推送sdk

    测试代码块 /*** vivo推送测试类* */ public class Vivo {public static final String ALIAS = "ALIAS";pub ...

  8. java集成oppo推送sdk

    准备工作 1.申请推送服务需要在oppo官网上架自己的app(比较蛋疼),需要一些资料,上架以后app评级为A/B的应用方可申请推送服务,获取到app_key和app_secret. 2.oppo官网 ...

  9. java集成极光推送(仅仅极光注册Id字段发送)

    添加依赖 在pom.xml文件的<dependencies></dependencies>标签中,加入下面依赖,且刷新依赖 <!-- 使用极光推送的jar包 --> ...

  10. android 信鸽 自动重启,Android简单集成信鸽推送

    添加项目的buid.gradle ndk { //选择要添加的对应cpu类型的.so库 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添 ...

最新文章

  1. php解析QQmv直链,网易云音乐直链解析API源代码^-^
  2. mysql5.6主从复制(读写分离)方案_MySQL5.6主从复制(读写分离)方案
  3. 洛谷 P1129 [ZJOI2007]矩阵游戏 解题报告
  4. android文件添加一行代码怎么写,Android:以编程方式添加Textview,而不是将文本包装到下一行(示例代码)...
  5. 征服 Redis + Jedis + Spring (一)—— 配置常规操作(GET SET DEL)
  6. 41. Element getElementsByTagName() 方法
  7. 如何解决NDK toolchains出现ABI mips64el-linux-android无法编译问题
  8. FPGA--串口通信基础知识
  9. zmap zgrab 使用
  10. vue axios封装及使用
  11. linux如何伪装ip,如何伪装你的IP(二)
  12. C# LISTVIEW实例:文件图标显示
  13. 举个栗子!Tableau 技巧(183):快速实现部分类别的排序
  14. 计算机音乐创作心得,理结与悠的作曲入门讲座(心得篇 3-4)
  15. Github连接不上怎么办?
  16. python头像变二维码_学了Python之后,美化二维码如此简单
  17. 中国科学技术大学2021计算机考研分数线,【中国科学技术大学】2021考研复试分数线3月13日已公布!速看!...
  18. 【OpenCV】双目相机测距及其深度恢复原理及其算法流程
  19. 华为新人培养计划曝光!(新员工培训就该这么做)
  20. 英国电信集团、西班牙电话公司和澳洲电讯参与区块链试验

热门文章

  1. 尚学堂马士兵SSH笔记下载
  2. 大厂都搞不定的安全难题,被这家初创公司破解了!
  3. 网络计算机自动显示,怎么设置电脑断网后自动报警提醒?
  4. Struts2通配符错误问题
  5. Struts2 通配符使用
  6. 第19节 扫描技术——基于Windows系统的工具
  7. JAVAFX的table样式修改
  8. 哈夫曼编码(Huffman Coding)多图详细解析
  9. 计算机软硬件配置在哪里查,如何查看电脑硬件配置信息?
  10. macOS: 卸载 Flash Player 迎接 2021