如何实现IOS APP被杀掉后依然可以接收到个推消息通知

背景

项目已经集成了个推SDK,但是在离线场景下无法收到推送消息,离线场景主要分2种情况,一种是用户将APP切换到了后台,一种是用户将APP杀掉了。
针对场景一:我们可以将APP支持后台运行,比如项目中使用到了后台持续定位功能,后台音频等(Xcode中可以查看支持哪些后台模式),可以增加接收到离线通知的概率。

后台模式
针对场景二:我们需要集成NotificationServiceExtension,下面就主要介绍一下如何集成

新增NotificationServiceExtension

在XCode中,按照以下步骤操作

新增一个target

新增Target
选择Notification Service Extension

配置好NotificationService的包名和签名

Bundle一般就用自己APP的包名加上NotificationService,如 com.edenwang.www.NotificationService

将下载的个推SDK中的NotificationService代码复制到项目中

个推SDK下载地址

https://docs.getui.com/download.html

下载个推SDK

解压开找到NotificationService

解压后的代码结构

将压缩包中NotificationService.swift文件内容替换项目中的NotificationService.swift

Info.plist和NotificationService.entitlements

在这里插入图片描述
记得将NotificationService.entitlements中包名更新成自己的

新建一个空的OC文件

Empty.m是新建的一个空的Objective-C文件,这个文件不能少。这个是咨询个推的技术人员后才得知的,说是混编的问题,如果是Swift项目需要加一个OC文件,如果是OC项目需要加一个空的Swift文件。可以查看下载的个推SDK中其他方式的实现作对比。

其他文件复制

复制NotificationService-Bridging-Header.h

打包测试

为了快速测试,需要将个推的后台运行临时关掉 GeTuiSdk.runBackgroundEnable(false)
安装到手机上后,将APP退出到后台后,稍等片刻,在个推控制台上查询当前设备的CID,检查CID的状态是否为离线,如果已经为离线了,可以通过个推的控制台推送测试消息,然后观察手机上收到的消息是否包含[Success]字符,如果有,说明大功告成了。

  override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {self.contentHandler = contentHandlerguard let bestAttemptContent = request.content.mutableCopy() as? UNMutableNotificationContent else { return }// [ 测试代码 ] TODO:语音播报let cnt: Double = 123 //读取apns中播报信息let name = ApnsHelper.makeMp3FromExt(cnt)let sound = UNNotificationSound(named: UNNotificationSoundName(name))bestAttemptContent.sound = sound// [ 测试代码 ] TODO: 用户可以在这里处理通知样式的修改,eg:修改标题,开发阶段可以用于判断是否运行通知扩展
//    bestAttemptContent.title = "\(bestAttemptContent.title) [WillIn]"// [ GTSDK ] 统计APNs到达情况和多媒体推送支持接口, 建议使用该接口GeTuiExtSdk.handelNotificationServiceRequest(request, withAttachmentsComplete: { [weak self] (attachments: Array?, errors: Array?) inguard let handler = self?.contentHandler else { return }// [ 测试代码 ] TODO:日志打印,如果APNs处理有错误,可以在这里查看相关错误详情// print("处理个推APNs展示遇到错误:\(String(describing: errors))")// [ 测试代码 ] TODO:用户可以在这里处理通知样式的修改,eg:修改标题,开发阶段可以用于判断是否运行通知扩展bestAttemptContent.title = "\(bestAttemptContent.title) [Success]"if let attachment = attachments as? [UNNotificationAttachment], !attachment.isEmpty {// 设置通知中的多媒体附件bestAttemptContent.attachments = attachment}// 展示推送的回调处理需要放到个推回执完成的回调中handler(bestAttemptContent)})}

然后你可以在这个代码基础上定制自己的业务逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/344420.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年烟花爆竹经营单位安全管理人员证考试题库及烟花爆竹经营单位安全管理人员试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年烟花爆竹经营单位安全管理人员证考试题库及烟花爆竹经营单位安全管理人员试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特…

【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案)

【STM32】HAL库的STOP低功耗模式UART串口唤醒,解决首字节出错的问题(全网第一解决方案) 前文: 【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(疑难杂症) 目前已解决 …

Docker五部曲之一:容器术语介绍

文章目录 前言背景基本术语容器镜像容器镜像格式容器引擎容器容器主机注册中心容器编排 进阶术语容器运行时镜像层标签存储库名称空间 参考 前言 本文内容翻译自参考文献。 背景 要理解容器术语,重要的是要精确地理解容器是什么。容器实际上是两个不同的东西。像…

DNS解析和它的三个实验

一、DNS介绍 DNS:domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用:将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件(优先级最高) 分散的管理 linux /etc/hos…

数据仓库 Apache Hive

一、数据分析 1、数据仓库 数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。 数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持&#xff08…

Nginx配置负载均衡实例

Nginx配置反向代理实例二 提醒一下:下面实例讲解是在Mac系统演示的; 负载均衡实例实现的效果 浏览器地址栏输入地址http://192.168.0.101/test/a.html,刷新页面进行多次请求,负载均衡效果,平均分配到8080端口服务和8…

02.部署LVS-DR群集

技能展示: 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR( Linux Virtual Server Director Server )工作模式,是生产环境中最常用的一种工作模式。 2.1.1.LVS-DR 工作原理 LVS-DR 模式&…

边缘计算:连接实时数据的力量与未来发展之路

边缘计算是一种分布式计算范式,它旨在将数据处理、存储和应用服务带到数据源的近端,即网络的“边缘”。在边缘计算模型中,算力和存储资源距离末端用户或数据源更近,这减少了数据在网络中传输的距离,从而降低延迟&#…

无心剑中译卡明斯《从未游历之地》

Somewhere I Have Never Travelled 从未游历之地 Edward Estlin Cummings 爱德华埃斯特林卡明斯 somewhere i have never traveled, gladly beyond any experience, your eyes have their silence: in your most frail gesture are things which enclose me or which i can…

DBeaverEE for Mac:强大的数据库管理工具

在当今数字化时代,数据库已成为企业信息管理的核心工具。为了更高效地管理和操作数据库,选择一个强大且易用的数据库管理工具是非常重要的。而DBeaverEE for Mac(数据库管理工具)正是一款值得推荐的选择。 DBeaverEE for Mac 是一…

智能分析网关V4基于AI视频智能分析技术的周界安全防范方案

一、背景分析 随着科技的不断进步,AI视频智能检测技术已经成为周界安全防范的一种重要手段。A智能分析网关V4基于深度学习和计算机视觉技术,可以通过多种AI周界防范算法,实时、精准地监测人员入侵行为,及时发现异常情况并发出警报…

【JAVA】concurrentHashMap和HashTable有什么区别

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 同步性质: 性能: 允许空键值(Allow Nulls): 迭代器(Iter…