iOS 15 通讯通知图片未显示

2023-12-21

我一直在尝试将我的(本地和推送)通知更新为通信通知。

当用户收到来自其朋友之一的通信事件时,我希望显示的通知包含该朋友的个人资料图片。就像新的 iMessage 应用程序一样。

观看专门的 WWDC2021 会议后,我向我的 SwiftUI 应用程序添加了 Siri Intent:

// I correctly added the StartCallIntent to both my app's Info.plist and the Siri Intent extension.
<array>
    <string>INStartCallIntent</string>
</array>

并尝试使用以下内容更新我的通知流程:

let image = INImage(imageData: friend.profilePicture.cellImage.pngData()!)
let intentFriend = INPerson(
  personHandle: INPersonHandle(value: friend.phoneNumber, type: .phoneNumber),
  nameComponents: friend.nameComponents,
  displayName: friend.localName,
  image: image,
  contactIdentifier: nil,
  customIdentifier: nil,
  isMe: false,
  suggestionType: .instantMessageAddress
)

let incomingCommunicationIntent = INStartCallIntent(
  callRecordFilter: nil,
  callRecordToCallBack: nil,
  audioRoute: .unknown,
  destinationType: .normal,
  contacts: [intentFriend],
  callCapability: .audioCall
)

let interaction = INInteraction(intent: incomingCommunicationIntent, response: nil)
interaction.direction = .incoming
interaction.donate(completion: nil)

do {
  let result = try notification.updating(from: incomingCommunicationIntent)
  return result
} catch let error {
  print("-- \(error)")
  // TODO: Handle error here
}

return notification

返回的UNNotificationContent然后处理为显示为推送通知或本地通知。

虽然上面的代码没有崩溃并且看起来/工作/,但通知看起来没有任何不同。 使用调试器查看,_UNNotificationCommunicationContext已初始化,但是:

  • _displayName is nil
  • _recipients为空(如预期)
  • _contentURL is nil
  • _attachments是空的
  • sender is set to a UNNotificationContact on which
    • handle & displayName已正确设置
    • _handleType似乎设置也正确

在应用程序的日志中,我可以看到:

[Intents] -[INCache cacheableObjectForIdentifier:] Unable to find cacheable object with identifier EDB29166-E46A-CF23-AB27-8B61F763A039 in cache.
[Intents] -[INCache cacheableObjectForIdentifier:] Unable to find cacheable object with identifier intents-remote-image-proxy:?proxyIdentifier=EDB29166-E46A-CF23-AB27-8B61F763A039.png&storageServiceIdentifier=com.apple.Intents.INImageServiceConnection in cache.

为了正确显示朋友的个人资料图片,我缺少什么?

谢谢


不幸的是,苹果在记录通信通知方面做得并不好,他们的 WWDC 视频遗漏了大量非常重要的细节,但有一些事情:

  1. 在您的通知服务扩展中Info.plist你需要添加这个:NSExtension -> NSExtensionAttributes(字典)->IntentsSupported(数组)->INSendMessageIntent or INStartCallIntent.

  2. 确保您在主应用程序目标上启用了“通信通知”功能。

  3. 最后,你的代码看起来是正确的,但你需要添加这个(注意:我只测试过这个INSendMessageIntent)

// Swift
incomingCommunicationIntent.setImage(image, forParameterNamed: \.sender)

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

iOS 15 通讯通知图片未显示 的相关文章

  • 沙盒测试帐户反复询问 iOS 应用内购买的密码

    我用 Swift 语言开发了一个应用程序 我添加了应用内购买来删除广告 我还创建了一个沙箱帐户来测试 但后来我忘记了这个账户的信息 我不确定信息 密码输入屏幕仍然以闪烁的屏幕显示方式显示 即使我重置设备并重新加载它 也没有任何好处 实际上一
  • 如何让应用更新以吸引人的屏幕形式提供给用户? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我最近在使用 Make My Trip 应用程序 我发现每当我启动应用程序时都会出现一个非常有吸引力的应用程序更新弹出屏幕 它说要更新应用程
  • prepareForSegue 和 PerformSegueWithIdentifier 发送方

    我想知道标题中的函数如何工作以及发送者参数 假设单击按钮调用了performSegue方法 那么这是否也调用了prepareSegue方法 是否在performSegue方法之前但在按下按钮之后调用prepareSegue方法 另外 这两个
  • Swift Firebase - 如何在使用 queryOrdered(byChild: ).queryEqual(toValue: ) 时获取所有 k/v

    root reviews postABC postId reviewXYZ I want everything under this reviewUID buyerUID 01010 text fast shipping responseT
  • Carthage 更新错误:“GitHub API 请求失败:凭据错误”

    这是我的购物车文件 Kanna HTML parsing library github tid kijyun Kanna gt 1 0 0 Realm database ORM github realm realm cocoa 当我跑步时c
  • 从 AVAudioRecorder 获取分贝

    我正在尝试从 AVAudio 录音机获取分贝值 这是我目前的代码 我有一个启动录音机的方法 然后是一个读取分贝值的方法 var recorder AVAudioRecorder 全局定义的记录器 然后在此处使用 func init reco
  • 在 SwiftUI 中,如何执行手势但将手势转发到其后面的视图?

    我正在创建一个工具提示系统 如果用户触摸工具提示之外的任何地方 我想关闭工具提示 我希望这样在工具提示之外的触摸既可以消除工具提示 又可以激活用户点击的任何控件 因此 您可以打开一个工具提示 然后仍然单击工具提示外部的按钮 并在第一次点击时
  • 如何在 Safari 上打开本地 html 文件?

    我想打开本地 html 文件Safari集成到我的Swift 3应用 我知道如何使用网址来做到这一点 这是我用来执行此操作的代码 let encodedString url addingPercentEncoding withAllowed
  • Mapkit 在 IOS 13 中使用过多的 CPU

    最近 在一些用户更新到 iOS 13 x 后 我的 iOS 应用程序开始频繁崩溃 在 iOS 12 x 中没有出现该问题 我正在使用 Mapkit 渲染一些 MKPolygons 和 MKPolylines MKPolylines 被删除并
  • Audiokit 修剪音频

    我正在制作音频编辑应用程序 我想修剪我的音频 对于音频编辑 我使用 AudioKit 框架 但我在教程和示例中找不到如何使用此框架修剪音频 异步导出允许设置开始和结束样本 https github com AudioKit AudioKit
  • CIAdditionCompositing 给出不正确的效果

    我正在尝试通过平均其他几个图像来创建图像 为了实现这一点 我首先将每个图像变暗 其系数等于我平均的图像数量 func darkenImage by multiplier CGFloat gt CIImage let divImage CII
  • Swift 中的 quitFirstResponder

    我怎样才能用Apple的新语言实现它 Objective C 代码 void touchesBegan NSSet touches withEvent UIEvent event for UIView view in self view s
  • 仅在 iPhone X 上显示状态栏

    如果不是 iPhone X 则希望隐藏状态栏 如果是 iPhone X 则希望显示状态栏 这很可能必须以编程方式完成 因为 plist 中没有支持此功能的键 我发现的最接近的一个是UIStatusBarHidden 方法一 You have
  • iOS 11 浮动 TableView 标题

    有一个应用程序包含多个部分 展开 时每个部分有几行 折叠 时没有 每个部分都有一个部分标题 使用以下子类重用它们UITableViewHeaderFooterView等等 到目前为止一切顺利 然后在 iOS 11 中 我使用了可视化调试器
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • CustomNSError 协议有什么作用以及为什么我应该采用它?

    什么是CustomNSError协议的用途以及为什么我应该采用它 Apple提供的文档仅指出 描述错误类型 具体提供域 代码和 用户信息字典 我已经在谷歌上搜索过 但找不到与我的问题相关的任何内容 每种类型都符合Error协议是隐含地桥接的
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • 来自索引范围 Swift 的新数组

    我怎样才能做这样的事情 从数组中取出前 n 个元素 newNumbers numbers 0 n 目前出现以下错误 error could not find an overload for subscript that accepts th
  • iOS WKWebView 处理文件下载

    我面临以下问题 在 Web 界面中 文件下载是通过锚标记触发的 如下所示 a href bla blabla a 虽然 Safari 浏览器可以处理此请求并打开一个对话框来处理文件 但 WKWebView 将此视为普通链接并且不对其执行任何
  • 在 UITableView 的部分标题文本下方添加一些边距

    我已经设计了标题文本的样式 func tableView tableView UITableView cellForRowAtIndexPath indexPath NSIndexPath gt UITableViewCell let ce

随机推荐

  • 如何通过策略将 Azure 资源锁应用到资源组

    我正在尝试创建一个 Azure 策略 该策略会将级别为 CanNotDelete 的资源锁部署到订阅内的资源组 目前该策略 100 合规 但该策略尚未创建任何锁定 我的 JSON policy rules 文件中有以下内容 if field
  • Spring/RabbitMQ 教程的 Docker 映像导致连接被拒绝

    我正在这里学习 Spring 教程 使用 RabbitMQ 发送消息 https spring io guides gs messaging rabbitmq 我发现了这个问题 但它没有解决我关于docker compose yml教程中找
  • 将所有 java swing gui 放在一个类中是否正常?

    我刚刚开始进行摇摆开发并且遇到了问题 将整个 GUI 放入一个类中正常吗 我正在构建的应用程序有一个显示多个不同 页面 的 JFrame 例如 如果用户单击按钮 他们将被带到具有不同布局的完全不同的页面 我已经配置了卡片布局 并且到目前为止
  • 如何从表格中显示最大值、最小值、中位数和平均值

    这张图上 就是user id 右边是每个用户的交易频率 如何显示该用户交易频率的最小值 最大值 中值和平均值 对于此类问题我需要进行什么计算 所以会出现中值最大最小值和平均值 检查这篇文章关于窗口函数 https help tableau
  • Web 应用程序的中央错误日志记录服务

    我即将启动一个新网站 我正在使用 Pingdom 来跟踪该网站的正常运行时间 但我感兴趣的是在一个中心位置记录该网站生成的任何错误 我想将代码放入顶级异常处理程序中 该处理程序将打包异常并将其发送到另一个应用程序 然后该应用程序会生成一封电
  • guava 是否有一个采用自定义哈希/等于函数的 Map 实现?

    任何人都知道Guava是否有与Functionaljava等效的版本HashMap http functionaljava googlecode com svn artifacts 3 0 javadoc fj data HashMap h
  • 有条件地在分类列中创建“其他”类别

    我有一个DataFrame df用一列 category使用以下代码创建 import pandas as pd import random as rand from string import ascii uppercase rand s
  • C 结构不扫描所有输入

    我有这个C代码 include stdio h main struct books char name 100 author 100 int year copies book1 book2 printf Enter details of f
  • Python try- except 块的 DRY 方法?

    客观的 我有几行代码 每行代码都能够产生相同类型的错误 并保证相同类型的响应 如何防止 try except 块出现 不要重复 问题 背景 我使用 ReGex 从文本文件中抓取格式不良的数据 并将其输入到自定义对象的字段中 该代码工作得很好
  • Laravel Ajax 下拉过滤器

    我正在尝试使用 Ajax 制作一个过滤器 我想在下拉列表中选择的类别发生变化时显示图像 现在 我正在视图中显示所有图像 并且我想要进行 Ajax 调用 返回过滤后的 images 数组以在视图中显示 但我被困住了 我不知道如何从控制器正确返
  • Pandas 交叉表矩阵 dot nansum

    我正在寻求帮助 使用类似 np nansum 的函数从现有数据帧创建子数据帧 我想将此表转换为非空列和的矩阵 dan ste bob t1 na 2 na t2 2 na 1 t3 2 1 na t4 1 na 2 t5 na 1 2 t6
  • 如何查找(并可能删除)个人文件

    Slack API 有一个方法files list 但这似乎只列出在公共频道上共享的文件 而不是在私人对话中共享的文件 作为团队管理员 我想删除旧文件 我不需要查看它们 我可以要求团队成员手动删除它们 但这对他们来说是一个非常缓慢且费力的过
  • 比较修订版本时 SVN 访问被拒绝

    我们正在使用 SVN 存储库 当我们尝试将本地未修改的文件与存储库中文件的最新版本进行比较时 我收到以下错误 换句话说 有人签入了更改 如果我更新 我将得到他们的更改 但首先我想看看他们的更改是什么 不要认为这很重要 但我们正在使用 Xco
  • 在 Windows 中的 django 中设置 cron 作业

    我想设置cronjob in my Django项目 但我正在使用windows 我试过django cron 但它不适用于windows 我该如何使用cronjob在我的项目中安排时间 使用django cron则不然 不能在Window
  • 下拉列表对齐问题(HTML/CSS)

    我以前问过这样的问题 但我使用的代码与上次不同 我正在尝试创建一个下拉菜单 主列表中的某些元素有一个下拉列表 新闻和团队 由于某种原因 它们移到了右侧 我希望下拉列表中的项目与其父项对齐 任何帮助 将不胜感激 Thanks http cod
  • @DataJpaTest 中的存储库初始化为 null

    我正在尝试在 Spring Boot 应用程序中为存储库编写一些测试 但是存储库自动连接为null 测试类的代码如下 package jpa project repo import org junit Assert import org j
  • Ember.ArrayProxy 更改不触发车把 #each 更新

    我怀疑有一种方法可以更新 Ember Array 代理来触发 ember 的通知 但我不知道如何实现 我正在覆盖 内容 属性来更新数组 数组会更新 但视图不会更新 App items Ember ArrayProxy create cont
  • Python:更改 json 解码的列表类型

    在 Python 2 7 中我可以使用object pairs hook在内置 json 模块中更改解码对象的类型 有没有办法对列表做同样的事情 一种选择是遍历作为钩子参数获得的对象 并将它们替换为我自己的列表类型 但是还有其他更聪明的方法
  • 传入通知的增强意图服务警告

    收到通知后 我的日志中出现两个错误 EnhancedIntentService Service took too long to process intent com google android c2dm intent RECEIVE A
  • iOS 15 通讯通知图片未显示

    我一直在尝试将我的 本地和推送 通知更新为通信通知 当用户收到来自其朋友之一的通信事件时 我希望显示的通知包含该朋友的个人资料图片 就像新的 iMessage 应用程序一样 观看专门的 WWDC2021 会议后 我向我的 SwiftUI 应