首先看一下腾讯信鸽的官方文档提供的IOS静默消息推送的JSON数据格式

{"ios":{"aps": {"content-available": 1},"custom": {"key1": "value1","key2": "value2"},"xg": "oops"}
}

直接通过提供的SDK可以对请求进行组装

// ios透传消息组装messageIOS = new MessageIOS();Aps aps = new Aps();aps.setContent_available(1);messageIOS.setAps(aps);messageIOS.setCustom(customContent);Message newMessage = new Message();newMessage.setIos(messageIOS);
// 消息体组装PushAppRequest request = new PushAppRequest();
// 消息体request.setMessage(message);
// 推送的消息类型request.setMessage_type(MessageType.message);
// 推送环境request.setEnvironment(Environment.dev);
// 多包名推送request.setMulti_pkg(true);
// 客户平台类型request.setPlatform(Platform.ios);
// 单设备token推送request.setAudience_type(AudienceType.token);request.setToken_list(token);
// 推送JSONObject ret = xingeIOS.pushApp(request.toString());
这个时候注意:推送是可以成功的,但是这个不单单是静默推送,在IOS客户端会走两个回调,一个是静默推送的回调,还有一个是Alert的回调。

经过很久的搜寻,在xinge:1.2.0的jar包中,Aps类(这是IOS消息独有的一个字段)

package com.tencent.xinge.bean;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonInclude.Include;@JsonInclude(Include.NON_NULL)
public class Aps {@JsonProperty(value = "alert",required = true)private Alert alert;@JsonProperty(value = "badge",required = true)private int badge;@JsonProperty("sound")private String sound;@JsonProperty("content-available")private int content_available;@JsonProperty("category")private String category;@JsonProperty("thread-id")private String thread_id;
.......

注意,注意,注意 这个位置的badge是一个必须的参数,但是对于静默推送的IOS中是不能有这些字段的,所以,实际上它推送的请求体数据是这样的:

{"ios":{"aps": {"content-available": 1"badge":0},"custom": {"key1": "value1","key2": "value2"},"xg": "oops"}
}

看见没,看见没,看见没 这是多了一个参数的,但是腾讯信鸽官方文档说:苹果推送服务(APNs)特有的,其中最重要的键值对如下content-available:标识消息类型(必须为1),且不能包含alert、sound、badge_type字段 这个也就是Aps类中的 badge字段。

但是badge是int类型的,int类型的…< -_-!>…不是Integer包装类型,所以它会默认初始化为0,尤其是这个东西还是必须的,所以你实际传递出去的参数很可惜多了个字段,导致的结果就是IOS客户端接收的时候就会走两个回调,一个静默消息,一个Alert消息。

解决方法

笔者的解决方法就是直接写一个一模一样的类(注意,将int类型的参数改为Integer类型
其他的忽略,因为腾讯信鸽SDK中没有对Account账户的操作进行封装,所以笔者也算是在SDK基础上再开发了

保证包名一样,类名一样,然后直接Copy一份原来SDK里面的代码,将类型改掉(int—>Integer)

package com.tencent.xinge.bean;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;@JsonInclude(JsonInclude.Include.NON_NULL)
public class Aps {@JsonProperty(value ="alert", required = true)private Alert alert;@JsonProperty(value ="badge", required = true)private Integer badge;@JsonProperty(value ="sound")private String sound;@JsonProperty(value ="content-available")private int content_available;@JsonProperty(value ="category")private String category;
........

之后就直接通过这个类进行Request请求的组装

最后你就可以得到正确的结果了。

PS: 笔者的这个方法仅仅在SpringBoot搭建的项目中试验过,其他的框架不知道行不行,但是如果实在不行的话,也只能自己直接照着那个JSON数据格式写,之后通过腾讯信鸽的Restful的访问风格直接加到URL后面也行。

腾讯信鸽Java服务端推送IOS静默消息的IOS客户端走两个回调的问题相关推荐

  1. Java 服务端推送消息有那么难吗?

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 转自公众号:码农小胖哥 今天项目经理交给我一个开发任务.如果有人在前台下了订单就给后台仓库管 ...

  2. Java服务端推送--SSE

    1.java代码: @GetMapping(value="/message", produces = "text/event-stream;charset=utf-8&q ...

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

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

  4. JAVA实现QQ:实现文字聊天、QQ用户登录、拉取在线用户列表、无异常退出、私聊、发文件、下载文件、离线留言、服务端推送新闻等功能(后端无界面,Utilty源码在后面、)

    这个仿QQ项目是参考韩顺平老师的多线程课程做的,因为个人觉得非常有意义特别是让我对多线程通信又了一个新的理解因此我准备写一篇总结(如果觉得视频太长可以参考下): 具体视频地址:大家给韩老师一键三连[韩 ...

  5. springboot 之 webscoket 服务端推送

    因为最近有后端实时推送数据的需求,所以想到了websocket组件,在此写一下springboot集成使用websocket的方法,供各位童鞋参考. 注:基于test项目. 1.首先打开pom.xml ...

  6. PHP服务端推送技术Long Polling

    perfgeeks linux . bash . php . python . c PHP服务端推送技术Long Polling Long Polling与Polling概述 服务端推送技术应用越来越 ...

  7. nett服务器接收消息的方法,C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用...

    C#(一沙框架) .net core3.1 SignalR 服务端推送消息至客户端的实现方法,用弹窗插件进行显示,非常美观实用 运行效果: 1.安装Microsoft.AspNetCore.Signa ...

  8. springboot 实现服务端推送消息

    文章目录 前言 一.关于SSE 1. 概念介绍 2. 特点分析 3. 应用场景 二.SpringBoot实现 三.前端vue调用 四.一些问题 前言 服务端推送消息我们采用SSE方式进行推送. 一.关 ...

  9. 基于腾讯信鸽设计一个微型推送服务

    今日科技快讯 据印度媒体报道,对于旗下短视频应用抖音国际版TikTok在印度遭封杀,母公司字节跳动表现得似乎"非常乐观",并计划未来三年在印度投资10亿美元.在接受采访时,字节跳动 ...

  10. 关注微信公众号并接收服务端推送通知

    这是一篇写在公司内网confluence上的文章,今天打开博客发现好久没有更新了,偷个懒直接来个搬运. 1.应用场景 终端用户关注客户微信公众号后,在公众号上可以接收到服务端发来的关联设备的报警信息 ...

最新文章

  1. Maven的resources插件配置详解(含过滤器的配置详解)
  2. socket buffer套接字缓存
  3. brew update失败提示:/System/Library/Frameworks/Ruby.framework/。。。解决方法
  4. linux arm寄存器,ARM寄存器总结
  5. [转载] 10 个最值得 Python 新人练手的有趣项目
  6. c语言中注释参与程序设计的编译吗,C语言程序设计(第4章函数)6
  7. iOS端im实时音视频功能快速开发实操指导!
  8. 方维出现 Fatal error: Class 'Session' not found
  9. 2016年计算机一级excel试题及答案,2016年计算机一级试题加答案
  10. C#+AE 地图制图(二)
  11. MP3比特率编码模式
  12. 全国各省 省会城市经纬度汇总
  13. FLUX-TMS-物流整体解决方案 附下载地址
  14. 收入增速环比抬升!从业务数据透视运营商转型战略布局
  15. RAR文件设置密码和清除密码的方法
  16. linux系统安装python包
  17. IEEE 1588 Ordinary clocks
  18. podman加速配置、harbor镜像仓库部署
  19. MT6260与MT6261mt6261设计资料汇总
  20. Spring Cloud(02)——bootstrap文件介绍

热门文章

  1. 围棋知名AI-KataGo 下载分享
  2. html符号中文含义大全特殊,中文标点符号大全名称
  3. 这样投递简历更容易找到工作
  4. 盘点AI江湖中,清华人的“无问西东”
  5. 连接上局域网打开计算机卡,win7怎么玩局域网游戏,win7怎么玩局域网游戏卡
  6. 【rmzt】美女之目露凶光win7主题
  7. 【§美女杨颖win7电脑主题下载§系统美化】
  8. 社交媒体与社会网络分析,深度解读社交网络营销
  9. c语言教材1-8章参考答案,C语言课后习题参考答案(第1-8章)
  10. 从Q2财报,看携程的内容“元宇宙”