Java推送IOS通知消息

公司需要做IOS消息推送,我负责后台代码的实现。写这篇文章也是将我踩坑得来的结果记录一下,分享一下。

APN介绍

Apple 推送通知服务(APNs) 是远程通知功能的核心。它是一种强大、安全且高效的服务,可供应用程序开发人员将信息传播到 iOS(以及间接的 watchOS)、tvOS 和 macOS 设备。

在用户设备上首次启动您的应用程序时,系统会自动在您的应用程序和 APN 之间建立经过认证、加密且持久的 IP 连接。此连接允许您的应用程序执行设置以使其能够接收通知,如配置远程通知支持中所述。

用于发送通知的另一半连接——提供者服务器和 APNs 之间持久、安全的通道——需要在你的在线开发者帐户中进行配置并使用 Apple 提供的加密证书。一个供应商是一个服务器,您部署和管理,您配置工作与的APN。

Pushy框架

Pushy 是一个用于发送APN(iOS、macOS 和 Safari)推送通知的 Java 库。

Pushy 使用 Apple 的基于 HTTP/2 的 APNs 协议发送推送通知,并支持 TLS 和基于令牌的身份验证。它与其他推送通知库不同,它侧重于完整的文档、异步操作和工业规模操作的设计。使用 Pushy,可以轻松高效地维护与 APNs 网关的多个并行连接,以向许多不同的应用程序(“主题”)发送大量通知。

我们相信 Pushy 已经是从 Java 应用程序发送 APNs 推送通知的最佳工具,我们希望您能通过错误报告和拉取请求帮助我们做得更好。
git地址:https://github.com/jchambers/pushy
完全可以根据git的说明文档进行修改代码。

IOS推送

推送流程

  1. 首先ios端开发需要去申请Apple的加密证书 (p8或p12)
  2. iOS端开发需要提供手机的唯一token
  3. 服务端加密证书验证通过后,调用pushy的api进行消息推送

代码示例

  1. 首先项目导入maven依赖
<dependency><groupId>com.eatthepath</groupId><artifactId>pushy</artifactId><version>0.15.0</version>
</dependency>
<dependency><groupId>io.netty</groupId><artifactId>netty-tcnative-boringssl-static</artifactId><version>2.0.41.Final</version><scope>runtime</scope>
</dependency>

获取apple证书方法:https://developer.apple.com/documentation/usernotifications/registering_your_app_with_apns
因为我们项目使用的是p12证书,所以验证代码是基于p12证书编写的

final ApnsClient apnsClient = new ApnsClientBuilder().setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST) //沙盒地址,生产地址是另一个.setClientCredentials(new File("/path/to/certificate.p12"), "p12-file-password") //p12证书的存放位置和p12证书的验证密码.build();


因为一些不可抗因素 我这边做了端口转发,如果没有端口限制,直接用默认端口443即可

final ApnsClient apnsClient = new ApnsClientBuilder().setApnsServer(ApnsClientBuilder.DEVELOPMENT_APNS_HOST).setSigningKey(ApnsSigningKey.loadFromPkcs8File(new File("/path/to/key.p8"),"TEAMID1234", "KEYID67890")).build();

这是 github上提供的p8证书的apns客户端方法(未尝试)
2. 推送

具体代码就粘在上面了,亲测好使。

总结一下会发生的坑…
因为网上有很多 pushy推送的相关代码,但是发现用的和我这个依赖并不是一个依赖,里面的服务器地址并不对,所以一直推送报错。
还有一个致命的问题,如果你的项目pom的parent集成了netty相关的依赖,而且版本过低。会导致在apns连接时报错…提示的报错也很坑。java.lang.exception: not support using BoringSSL
还以为是证书有问题,和ios那边确认了好久…

Java推送IOS通知消息相关推荐

  1. java推送微信模板消息

    /*** 注册成功,通知模板消息实体类*/ public class TemplateMessage {private String touser; //用户OpenIDprivate String ...

  2. 后端——》Java程序推送微信订阅消息

    使用场景1:在微信小程序中进行了某种操作后,推送消息告知用户的操作结果 使用场景2:微信端办公流程提交给下一个人审批后,得到审批通过或是驳回修改的命令 使用场景具体如下图,可用在签到.提醒.通知.警告 ...

  3. Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知

    今天来讲一下 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知 一.配置钉钉群 1.新建一个接收通知的钉钉群 如下图,创建一个接收通知的钉钉群 选择项目群,点创建 输入群名称,右侧选择群 ...

  4. 微信公众号-java上传图片素材到微信服务器基于事件推送两条消息

    微信公众号-java上传图片素材到微信服务器&基于事件推送两条消息 场景:基于微信扫码登录/关注事件,向用户推送两条消息. 分析:翻阅了微信开发者文档和一些其他资料发现,公众号针对用户关注/扫 ...

  5. 个推消息推送iOS版常见问题整理

    为了更好地服务开发者,此次我们针对个推消息推送iOS版使用中可能出现的一些常见问题做了整理,提供了一些比较方便掌握的解决方法,希望能帮助到大家. 1. iOS推送流程是什么样的? iOS下发的消息分两 ...

  6. app消息推送(ios/android)基础知识

    手机推送会遇到存在两种情况: app在界面或后台运行(端内) app从后台被移除(端外) 端内推送 轮询:定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接.(适合小型) [h5 ...

  7. 微信公众号 - Java推送小程序订阅消息给用户

    不啰嗦,我们直接开始! 本文使用体验版小程序进行调试. 一.开发前小程序准备: 1.登录微信公众平台 点开下面链接,使用微信扫码 微信公众平台 然后选择一个小程序并登录 2.在小程序后台找到Appid ...

  8. 微信公众号 - Java推送公众号模板消息给用户

    不啰嗦,我们直接开始! 由于没有公众帐号,本文使用微信公众平台接口测试帐号进行调试. 一.申请测试帐号 1.使用微信扫码登录下面网址 微信公众平台 (qq.com) 2.找到appID和appsecr ...

  9. android极光推送原理,【揭秘】极光推送ios、Android消息推送达率的原理

    初接触极光推送的使用者,为了衡量消息推送的质量.经常会纠结到消息的"送达率"这个概念.那么究竟什么是消息送达率呢?或者如何正确理解消息的送达情况呢? 基本概念 先来看与消息送达相关 ...

最新文章

  1. 根据PI/4 = 1 - 1/3 +1/5-1/7+1/9求圆周率
  2. UNIX环境高级编程 第12章 线程控制
  3. SqlServer索引的原理与应用
  4. terminal怎么运行c语言文件,在mac电脑的terminal里该如何运行c语言
  5. 反汇编学习笔记2 函数的本质
  6. LiveVideoStackCon技术培训 限量买1赠1
  7. IdentityServer4系列 | 资源密码凭证模式
  8. 构建Java Web应用程序时遵循MVC的三个步骤
  9. 块内拉升lisp_求大神告知,如何用LISP实现块数量分类统计程序,最好统计后列出表格。谢谢了。...
  10. IOS之导航控制器与表视图
  11. 提交文件至服务器的设置——表单属性中的 enctype
  12. HBase详细的安装和使用方法
  13. android开发所遇问题集(一)----Mr.Zhang
  14. canal.adapter启动报错Could not resolve placeholder ‘HOSTNAME%%.*‘
  15. 颜色值不透明度对应表(0%-100%)
  16. 推荐一款免费在线高效作图工具
  17. 西电大学计算机专硕,2021西安电子科技大学计算机专硕考研成功经验分享
  18. 下载flash文件的若干方法!
  19. ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException 解决方案【SOLVED】
  20. 如何测试支付宝的转账功能

热门文章

  1. php透视图,第五十七课 利用透视尺绘制透视图-透视尺基本篇2-
  2. 计算机高级培训测试题答案,计算机经典测试题及的答案.doc
  3. 2021-2022年十类(30+)热门资质证书汇总分享,
  4. 外汇天眼:Swissquote获得CySEC许可证、BUX收购Ninety Nine
  5. 带您3分钟了解618购物节是如何轰动全国的?
  6. Web.3空投之王撒福利
  7. Python: 学习系列之七:模块、PIPY及Anaconda
  8. vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案
  9. 每日英语——aphorism
  10. C++ socket通信遇到的无法解析外部符号