应用程序如何确定其是否由于 Voip Push 而从终止状态启动?

2023-12-26

【注意:这个问题是关于VoiP推送的,不是关于普通推送的】 [注意2:问题不是关于如何设置应用程序来接收 Voip 推送,请正确阅读它实际询问的内容]。

如果应用程序终止并且 Voip 推送到达,则 didFinishLaunchingWithOptions 中的选项为零。 (例如,这可以与用户点击本地通知时启动应用程序形成对比)。

应用程序如何知道它是由于 VoIP 推送的到来而启动的,而不是应用程序已经在后台时推送到达的?


您需要设置一个委托PKPushRegistry您创建的对象并将其指定为 VOIP 类型:

let voipRegistry = PKPushRegistry(queue: nil)
voipRegistry.delegate = myPushDelegate
voipRegistry.desiredPushTypes = [PKPushType.voIP]

您的代表必须遵守PKPushRegistryDelegate协议。

然后,实施pushRegistry(_:didReceiveIncomingPushWith:for:completion:)协议函数(参考 https://developer.apple.com/documentation/pushkit/pkpushregistrydelegate/2875784-pushregistry) - 该函数将在收到推送时被调用(即使应用程序已提前终止)。

功能说明:

通知委托人已收到远程推送。

指定的推送类型。一旦您完成,请立即调用完成处理程序 已完成有效负载的处理。当收到推送通知时调用此方法

请注意该函数:pushRegistry(_:didReceiveIncomingPushWith:for:)已被弃用,所以不要与我上面提到的混淆。

有关的更多信息PKPushRegistryDelegate协议:here https://developer.apple.com/documentation/pushkit/pkpushregistrydelegate

关于实际问题,有一个解决方法 - 这个想法是创建一个标志,当应用程序终止时该标志将被销毁,但一旦它醒来,它的状态就会改变 - 如果应用程序从后台唤醒标志状态将被保存,但如果应用程序在终止后唤醒,则标志将保持默认值。

在推送的委托类中:

import PushKit
class PushDelegate: PKPushRegistryDelegate  {

    var flag = false

      func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType) {
            if flag {
                print("the app woke up from background")
            } else {
                print("the app was terminated")
                flag = true
            }
        }
}

此外,为了检测用户是否启动了应用程序(这是应用程序处于活动状态的唯一情况),请使用以下代码:

let state = UIApplication.shared.applicationState

    if state == .background {

        // background
    }
    else if state == .active {

        // foreground
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序如何确定其是否由于 Voip Push 而从终止状态启动? 的相关文章

  • 在flutter中跟踪背景位置时使用background_locator插件时出现问题

    我正在尝试使用 flutter 跟踪后台位置 为此我正在使用背景定位器 https pub dev packages background locator插入 它的实现方式是注册某些静态回调函数 我声明了一个 File 类型的类变量来在后台
  • 在 UITableView 中设置滚动位置

    我有一个应用程序 其工作方式与 iPhone 的 联系人 应用程序的工作方式有些相似 当我们添加新的联系人时 用户将被定向到包含联系人信息的仅查看屏幕 如果我们从导航栏中选择 所有联系人 用户将导航到查看最近添加的联系人的所有联系人列表 我
  • 从后台唤醒时应用程序会重新启动

    iOS 大师您好 我已经广泛搜索了答案 但找不到答案 我打赌对我的问题的第一个答复将是另一个类似的问题 但我找不到它 不管怎样 我的问题是我正在运行一个简单的地图应用程序 用户可以在地图上放置图钉 并在放置的图钉周围有一个自定义的圆圈覆盖
  • 如何在 Monotouch 中对 UIImageView 进行运动模糊效果?

    在 MonoTouch 中进行实时运动模糊的方法是什么 当滚动惯性图片库时 我需要在 UIImageView 上应用运动模糊效果 以强度和方向作为参数 就像在 Photoshop 中一样 我在 CocoaTouch 或 CoreAnimat
  • 如何改进 iOS 中的 TWTweetComposeViewController 代码?

    我已经实现了以下代码来进行 Twitter 共享 在我的代码中 我尝试测试 iOS 5 如果这不起作用 我会回到使用 ShareKit 的 Twitter 代码进行共享的旧方式 我向同事展示了代码 他建议我的代码可能有缺陷 我需要做两件事
  • 如何使用 Unity 在 Android 设备上以各种宽高比显示游戏的相同部分?

    我从 Libgdx 引擎转向 Unity 是一名初级程序员 我尝试在 Unity 中为 Android 和 iOS 设备制作游戏 但在宽高比 分辨率缩放方面遇到问题 在 Libgdx 中 如果您开发了一些东西 您可以指定 默认 分辨率 并且
  • UITextField 字体大小在开始或停止输入字符时发生变化

    我见过很多线程 但没有找到解决这个问题的任何具体解决方案 我使用 XIB 创建了 UITextfield 尚未以编程方式对该字段执行任何操作 一旦我开始打字 文本字段的字体就会改变 一旦我将焦点移出文本字段 并且随着键盘消失 字体大小就会减
  • 编写支持 iOS 3.1.3 和 iOS 4.x 的 iOS 应用程序时的陷阱

    我想编写一个可以在 iOS 3 1 3 到 iOS 4 1 上运行的应用程序 我知道如何设置部署目标和基础 SDK 阅读 Apple 文档后 它很大程度上依赖于检查类是否可用和 或实例是否响应特定选择器 现在我的问题是 如果 Apple 从
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • 如何在 RestKit 中为同一类提供两条发布路线

    由于我无法弄清楚如何为同一个类设置两个不同的 POST 资源路径 因此我尝试手动创建 RKObjectLoader 请求 但它似乎不断发送 GET 请求而不是 POST 即使我已将方法设置为邮政 这是我的代码 User user User
  • iOS 开发: [[self navigationController] viewControllers]; 有哪些原因?会返回零吗?

    以下语句返回零 NSArray viewControllersInNavStack self navigationController viewControllers 这个语句是在导航堆栈中大约四层深度的视图控制器中调用的 所以我不明白它如
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • 从 Core Data、iOS 获取最后插入的项目

    有没有办法获取核心数据数据库中最后插入的项目 这将返回最后插入的对象 setFetchLimit 1 和 setFetchOffset 所有条目数 1
  • 在模拟器中运行应用程序时删除本地通知的 iOS 权限警报

    我正在尝试编写验收测试KIF https github com kif framework KIF在一个很早就要求本地通知权限的应用程序上 不幸的是 由于 iOS 模拟器安全原因无法使用 KIF 自动接受 iOS 权限警报 https gi
  • 具有多种自定义单元格类型的 RxSwift 表视图

    我想知道是否有任何代码示例RxSwift当我可以在一个表视图中使用多个自定义单元格时 例如 我有两个部分 第一部分有 10 个单元格 类型为CellWithImage标识符和第二部分有 10 个带有类型的单元格CellWithVideo标识
  • Swift 中 UIImages 的淡入淡出动画

    我有一组图像 我希望它们在登录屏幕的背景中淡出 我无法在 swift 中找到任何可以做到这一点的东西 有什么办法我可以做到吗 这是我当前的代码 override func viewDidLoad super viewDidLoad star
  • 如何使用 afnetworking 在后台上传任务

    我正在尝试使用 AFNetworking 上传大文件 并在应用程序处于后台时继续上传 我可以很好地上传文件 但是当我尝试使用后台配置时 应用程序崩溃并显示以下堆栈跟踪 异常 EXC BAD ACCESS 代码 1 地址 0x8000001f
  • iOS 对 Google 云消息传递的支持

    我在谷歌的开发者控制台中看到 GCM 允许为 iOS 生成 API 密钥 我在网上搜索了有关如何在 iOS 应用程序中通过 GCM 实现推送通知的任何类型的文档 但没有找到答案 真的有可能在 iOS 应用程序中使用 GCM 实现推送通知 j
  • 下标:使用字符串枚举访问我的字典值

    我想做类似的事情 使用字符串枚举访问我的字典值 我试图重载字典的下标但没有成功 访问字典 let district address JsonKeys district 其中 JsonKeys 是 enum JsonKeys String c

随机推荐

  • 熊猫绘图,正值一种颜色,负值另一种颜色

    我有一个 pandas 数据框 在其中绘制 12 列中的两列 一列作为 x 轴 一列作为 y 轴 x 轴只是一个时间序列 y 轴的值是大约 5000 到 5000 之间的随机整数 有没有办法只使用这两列来制作散点图 其中 y 的正值是某种颜
  • 删除虚假逗号

    一位白痴客户正在生成 csv 文件 但其中一个字段 描述字段 有时有多余的逗号 是否有一个整洁的正则表达式来查找这些不良记录并用其他内容替换多余的逗号 SED 命令行就可以了 Example A B C This is a descript
  • 如何在 puppeteer 中获取所有 xhr 调用?

    我在用puppeteer加载网页 const browser await puppeteer launch headless true const page await browser newPage await page setReque
  • Jpa 事务 javax.persistence.RollbackException:事务标记为 rollbackOnly

    我有一个应用程序通过 jpa 对各种数据库表进行大量写入 这些写入之一可能会导致乐观锁异常 如果抛出一个 也没什么大不了的 我希望提交事务的其余部分 我通过以下方式查看了 Spring 事务的无回滚功能
  • Redis 中高效的索引类型操作

    我正在尝试在 Redis 中创建一组索引 用于执行 AND 操作 像这样 inx 头发颜色 金发 set key1 key2 key3 inx 眼睛颜色 蓝色 设置 key1 key2 我可以使用sinter找到所有金发蓝眼睛的钥匙 我有这
  • RSA_private_加密总是失败

    我正在学习在我的程序中使用 OpenSSL 库 在代码中 我生成一个私钥 并立即使用该密钥加密消息 但总是失败 请帮助我 private key RSA generate key RSA KEY LENGTH RSA 3 NULL NULL
  • 如何更改 SwitchCompat 的轨道颜色

    我尝试使用以下链接来更改 SwitchCompat 的颜色 如何更改 SwitchCompat 的颜色 https stackoverflow com questions 26714864 how to change the color o
  • 如果不存在图像则显示默认图像

    我在 Centos 5 上运行 Apache 我想实现重写规则 当用户尝试访问文件夹中的图像时 var site com html image products 该规则应该检查图像是否存在 如果不存在 我想要 var site com ht
  • 如何为 WinForms 应用程序创建 MSIX 包?

    我正在尝试转移到 MSIX 来安装我们的应用程序 该应用程序目前通过 ClickOnce 安装部署给我们的客户 如果有更新 则需要在启动时进行更新 它是一个 Net Framework 4 7 2 WinForms 应用程序 我有点不知道如
  • 如何使用 Kaminari (或 will_paginate)gem 对数组的哈希值进行分页

    我现在已经设法找到解决方法 现在 索引操作在调用页面之前有一个 订单 子句 然后按日期对餐食进行排序和分组 接下来是 hackey 位 total pages 和 pages 在视图中用于提供分页链接 因为内置帮助器不适用于 meals 返
  • 拥有“(a -> b) -> b”是否等同于拥有“a”?

    在纯函数式语言中 您可以对值执行的唯一操作就是对其应用函数 换句话说 如果你想用 type 的值做任何有趣的事情a你需要一个具有类型的函数 例如 f a gt b然后应用它 如果有人递给你 flip apply a与类型 a gt b gt
  • 使用鼠标从视频上的矩形设置 ROI

    我有视频 当程序运行时 视频的第一帧被视为图像 并且允许用户在图像上绘制矩形 绘制矩形后 用户必须右键单击图像来确认矩形 当鼠标右键单击时 图像消失 视频开始播放 并在其上绘制矩形 我能够完美地绘制矩形 但无法将该矩形设置为 ROI 我想要
  • 如何使用 boto3 将文件上传到 Amazon Glacier Deep Archive

    我已成功将文件上传到 Glacier 但我想直接上传到 Deep Archive 我搜索了文档 但没有发现如何设置存储类别DEEP ARCHIVE直接地 您可以使用put object 其中有一个StorageClass参数 或者你可以使用
  • 为什么iOS SDK和iOS操作系统版本会互相影响?或者:什么是 iOS SDK?

    EDIT 下面 H2CO3 的答案让我几乎高兴 但事实并非如此 解释一件事 为什么在构建时会出现运行时异常 针对 SDK6 的应用程序 UIPageViewController 需要一个子控制器 在将其添加到父控制器之前 但在构建时则不然
  • 在 Java 中组合数组

    在下面的代码中 我需要读取五个学生姓名的列表以及每个学生五个测验的分数 这会将姓名加载到 String 类型的 ArrayList 中 并将测验分数加载到 Integer 类型的 ArrayList 中 我已经通过两个不同的 ArrayLi
  • 评价我非法状态例外

    正在开发给我评分功能 在这方面遇到问题 我已经在名为 RateUss 的片段中编写了 Rate me 函数代码 但问题是 我没有启动该部分代码的确切位置 因此用户在导航视图中单击 速率 按钮 因此会出现此速率对话框 import andro
  • 优化 Google 脚本以隐藏列

    这两个脚本非常慢 我处理的数据集大约有 32 列 x 1000 行 增长速度相当快 我读过甚至使用过像数组一样处理数据的代码 这样你就可以只调用一次谷歌服务 但我不确定这如何帮助我解决这种情况 我需要根据使用谷歌表格的人隐藏某些列 这是实际
  • 带有两个行终止符的批量插入

    我正在尝试导入一个文本文件 因此结果只是一列的单独行中的单词 例如一段文字 你好妈妈 我们再见面 应该给出5条记录 Hello Mom we meet again 我尝试用以下方法来完成此任务BULK INSERT with ROWTERM
  • 线程本地存储可以被伪造/黑客攻击吗?

    我发现自己有点进退两难 我有一个大型应用程序 其中有 Google 的 V8 javascript 引擎 一些调用是在 UI 线程上对 V8 引擎进行的 为了像大家建议的那样对用户友好 一些长时间操作在单独的线程上运行 而不挂起 UI 线程
  • 应用程序如何确定其是否由于 Voip Push 而从终止状态启动?

    注意 这个问题是关于VoiP推送的 不是关于普通推送的 注意2 问题不是关于如何设置应用程序来接收 Voip 推送 请正确阅读它实际询问的内容 如果应用程序终止并且 Voip 推送到达 则 didFinishLaunchingWithOpt