远程通信通知不起作用 iOS 18

问题描述 投票:0回答:1

我正在尝试使通信通知与我设置的远程推送通知一起使用,特别是这样我可以让用户头像出现在通知中。我已经成功地为我的应用程序设置了一个通知服务扩展,我已经验证了它的工作原理(在

NotificationService
类中命中了断点,并且我能够修改标题),并且通过遵循 guide,我最终得到了使用此代码:

override func didReceive(
  _ request: UNNotificationRequest,
  withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
  self.contentHandler = contentHandler
  bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

  if let bestAttemptContent {
    contentHandler(bestAttemptContent) // REMOVE this if statement
  }

  let personHandle = INPersonHandle(value: "senderID", type: .unknown)
  let person = INPerson(
    personHandle: personHandle,
    nameComponents: .init(givenName: "senderName", familyName: "family name"),
    displayName: "senderName",
    image: nil,
    contactIdentifier: nil,
    customIdentifier: "some-unique-id"
  )

  let intent = INSendMessageIntent(
    recipients: nil,
    outgoingMessageType: .outgoingMessageText,
    content: "some content",
    speakableGroupName: nil,
    conversationIdentifier: "unique-user-id-conv",
    serviceName: nil,
    sender: person,
    attachments: nil
  )

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

  do {
    let updatedContent = try request.content.updating(from: intent)
    let mutableBestAttemptContent = (updatedContent.mutableCopy() as? UNMutableNotificationContent)!
    mutableBestAttemptContent.userInfo = request.content.userInfo

    contentHandler(mutableBestAttemptContent)

  } catch {

  }
}

当我收到通知时,此代码将运行,并且我已使用断点验证了

contentHandler(mutableBestAttemptContent)
被调用并且意图已正确捐赠。

目前,我省略了添加图像,因为我想首先获得一个最小的示例,其中显示

person
的名称(尽管我也使用硬编码
INImage(url: validURL)
对此进行了测试,但没有成功),但是该代码不起作用。

此外,我还有以下内容:

  1. 通知服务扩展 Info.plist 文件包含以下内容:
<dict>
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionAttributes</key>
        <dict>
            <key>IntentsSupported</key>
            <array>
                <string>INSendMessageIntent</string>
            </array>
        </dict>
        ...
    </dict>
</dict>
  1. 主应用程序目标的 Info.plist 中有以下内容
<dict>
    <key>NSUserActivityTypes</key>
    <array>
        <string>INSendMessageIntent</string>
    </array>
    ...
</dict>
  1. 在主应用程序目标中添加了“通信通知”功能,以及“推送通知”、“后台模式”(选中“远程通知”)和“Siri”。
  2. 可能无关紧要,但我在某处看到服务扩展的捆绑包 ID 必须以主应用程序目标的捆绑包 ID 为前缀,情况也是如此。

我对为什么这不起作用感到有点困惑,而且关于此事的文档少得令人震惊,所以我什至不知道如何进行调试。大家有什么想法吗?

更新: 我犯了一个愚蠢的错误,并将立即调用

contentHandler
的自动生成代码保留在函数中。删除该行(我在下面记录过)可以解决此问题。我保留这篇文章是为了帮助其他人了解需要包含的所有其他内容。

ios swift apple-push-notifications
1个回答
0
投票

您似乎不小心在源代码中留下了一些自动生成的代码,因此总是立即调用

contentHandler
。如果您删除调用它的第一个代码块,它应该可以工作

  if let bestAttemptContent {
    contentHandler(bestAttemptContent) // REMOVE this if statement
  }
© www.soinside.com 2019 - 2024. All rights reserved.