iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消

iOS 不用VOIP也可以实现微信来电邀请推送持续响铃震动及及时来电取消

  • 前言
    • 一 、关于NotificationServiceExtension
      • 1. 创建
      • 2. 推送机制
      • 3. API 实例方法
  • 二、 APNS Push Payload
    • 2. 来电邀请
    • 2. 来电取消
  • 三、数据共享
    • 3. 配置共享域
  • 四 知识点就到这里,下面是主要代码
    • 4. 1 NotificationService.m 文件
    • 4.2 前后台问题
  • 五、参考文章
  • 六、VOIP

前言

写这个功能花费我了很长一段时间,简直头秃。不知道有没有相同感受的。
一开始原以为使用NotificationServiceExtension推送服务扩展轻轻松松就可以实现,然后一顿操作,发现了很多问题。
重新查看了官方文档,发现以目前的机制根本无法实现这个功能。
后来又一顿资料搜索发现了VOIP这个东西,刚刚好正是我所需要的,但是问题来了,中国地区在iOS13后,已经禁用了该功能,一旦使用这个功能就面临着,上架被拒的风险,当然如果你是在国外上架的,当我没说。

当撸掉头上一戳毛之后,终于看到了希望的曙光.
请继续往下翻。

一 、关于NotificationServiceExtension

1. 创建

使用Xcode打开项目,选中File -> New -> Target...,在出现的弹窗中选择Notification Service Extension模板。如下图所示:

请添加图片描述
点击Next后,你需要填写特定于应用程序的相关信息。添加完毕,点击Finish可以在项目的TARGETS里看到多了Service Extension一项。如图所示:
在这里插入图片描述
而项目中则会生成NotificationService文件夹,以及相应的类文件和plist文件,如图所示:
在这里插入图片描述

2. 推送机制

当你配置了通知服务扩展程序后,每个通知都会执行以下过程:

  • App收到通知。
  • 系统创建扩展类的实例对象并在后台启动它。
  • 你的扩展程序会执行内容编辑和/或下载某些内容操作。
  • 如果你的扩展程序执行太长时间(最多30s)而不能完成它的工作,将会收到通知并被立即终止。
  • 通知显示给用户。

3. API 实例方法

3.1 在该方法内可以对通知进行任何必要的更改,并在完成后通知系统。最多处理时长为30s, 超过30s系统会自动退出通知横幅。

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler;

官方解释
Override this method and use it to modify the UNNotificationContent object that the system delivers with the notification. At some point during your implementation, execute the contentHandler block and pass it your modified content. If you decide not to modify the content, call the contentHandler block with the original content from the request parameter.
You can modify any of the content from the original request. You might customize the content for the current user or replace it altogether. You can use this method to download images or movies and add them as attachments to the content. You may also modify the alert text as long as you don’t remove it. If the content object doesn’t contain any alert text, the system ignores your modifications and delivers the original notification content.
Your extension has a limited amount of time (no more than 30 seconds) to modify the content and execute the contentHandler block. If you don’t execute that block in a timely manner, the system calls your extension’s serviceExtensionTimeWillExpire method to give you one last chance to execute the block. If you don’t, the system presents the notification’s original content to the user.

3.2serviceExtensionTimeWillExpire,在这里给你提供最后一次执行contentHandler代码块的机会。如果你什么都没做,系统将向用户显示通知的原始内容,你做的所有修改都不会生效

// 扩展程序被系统终止之前会被调用
- (void)serviceExtensionTimeWillExpire;

官方解释
If your didReceiveNotificationRequest:withContentHandler: method takes too long to execute its completion block, the system calls this method on a separate thread to give you one last chance to execute the block. Use this method to execute the block as quickly as possible. Doing so might mean providing some fallback content. For example, if your extension is still downloading an image file with the intent of attaching it to the notification’s content, update the notification’s alert text to indicate that an image download is in progress. If you fail to execute the completion block from the didReceiveNotificationRequest:withContentHandler: method in time, the system displays the notification’s original content.

二、 APNS Push Payload

推送的内容需要服务器配合下,需要知道推送的类型,来电邀请、取消做处理,普通推送就不用管正常走就行了。

2. 来电邀请

{"_j_business" = 1;"_j_data_" = "{\"data_msgtype\":1,\"push_type\":4,\"is_vip\":1}";"_j_msgid" = 18101194842707757;"_j_uid" = 75039914131;aps =     {alert =         {title = "来电邀请";};badge = 0;"mutable-content" = 1;sound = "laidian.caf";};"extra_key" = "extra_value";pushType = 1;
}

mutable-content必须设置为1;
附加字段与服务器约定好,例如:
pushType: 推送类型 来电邀请为1,来电取消为2.

2. 来电取消

{"_j_business" = 1;"_j_data_" = "{\"data_msgtype\":1,\"push_type\":4,\"is_vip\":1}";"_j_msgid" = 18101194848382700;"_j_uid" = 75039914131;aps =     {alert =         {title = "\U8bed\U97f3\U901a\U8bdd\U53d6\U6d88"

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

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

相关文章

C++ 八数码问题理解 `IDA*` 算法原则:及时止损,缘尽即散

1.前言 八数码是典型的状态搜索案例。如字符串转换问题、密码锁问题都是状态搜索问题。 状态搜索问题指由一种状态转换到到最终状态,求解中间需要经过多少步转换,或者说最小需要转换多少步,或者说有多少种转换方案。本文和大家聊聊八数码问…

如何在Shopify 创建Mega Menu

在Shopify上创建Mega Menu可以通过以下步骤完成: 1. 选择适合的主题 首先,选择一个适合的主题,因为不是所有的Shopify主题都支持Mega Menu。确保选择一个具有自定义菜单功能的主题,或者您可以使用Shopify App Store中的应用程序来…

(十三)【Jmeter】线程(Threads(Users))之tearDown 线程组

简述 操作路径如下: 作用:在正式测试结束后执行清理操作,如关闭连接、释放资源等。配置:设置清理操作的采样器、执行顺序等参数。使用场景:确保在测试结束后应用程序恢复到正常状态,避免资源泄漏或对其他测试的影响。优点:提供清理操作,确保测试环境的整洁和可重复性…

mysql索引问题

今天在工作写项目的时候,突然发现很多地方没有加索引,然后我就去加了,查了不少资料,捡起来了不少东西,来简单聊一聊,工作中最重要的一个细节:索引 mysq的存储结构 首先要聊一聊mysql的存储模式…

Docker镜像和容器

1.Docker的架构和底层技术 Docker提供了一个开发、打包、运行APP(应用application)的平台把APP和底层infrastructure(基础设备)隔离开来 ApplicationDocker EngineInfrastructure(physical/virtual) 1.1Docker Engine组成 后台…

【前端素材】推荐优质后台管理系统GramOs平台模板(附源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具,它通常作为一个独立的后台界面存在,供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能: 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

Imagewheel私人图床搭建结合内网穿透实现无公网IP远程访问教程

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

工具篇-- 定时任务quartz

文章目录 前言一、quartz 介绍:二、quartz 的简单使用:2.1 引入jar:2.2 定义任务: 三、quartz 核心组件:3.1 JobDetail:3.1.1 JobDetail介绍:3.1.2 JobDetail 和job 的关系: 3.2 trigger:3.2.1 trigger 介绍…

基于Spring Boot的安康旅游网站的设计与实现,计算机毕业设计(带源码+论文)

源码获取地址: 码呢-一个专注于技术分享的博客平台一个专注于技术分享的博客平台,大家以共同学习,乐于分享,拥抱开源的价值观进行学习交流http://www.xmbiao.cn/resource-details/1760645517548793858

【动态规划专栏】专题四:子数组问题--------最大子数组和环形子数组的最大和

本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。 💓博主csdn个人主页:小…

现货黄金中短线投资该怎么做?

要明确什么是现货黄金的中短线投资,中短线投资是指在短期内(一般为几天至几周)对现货黄金进行买卖操作,以期获得收益的投资方式。相较于长线投资,中短线投资的风险相对较大,但同时收益也更为可观。那么&…

【TCP/IP】内核网络堆栈

在Linux内核中,网络堆栈(network stack)是一套实现网络通信功能的软件包,负责处理数据包的发送和接收。网络堆栈按照OSI模型(开放式系统互联通信参考模型)或TCP/IP模型的层次结构来组织,实现了从…