Code: Select all
override func didReceive(
_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void
) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent {
contentHandler(bestAttemptContent)
}
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 {
}
}
Im Moment habe ich darauf verzichtet, ein Bild hinzuzufügen, da ich zunächst ein minimales Beispiel zum Laufen bringen möchte, in dem der Name der Person angezeigt wird (obwohl ich dies auch mit getestet habe). ein fest codierter INImage(url: validURL) ohne Erfolg), aber dieser Code funktioniert nicht.
Außerdem habe ich Folgendes:
- Die Notification Service Extension Info.plist-Datei enthält Folgendes:
Code: Select all
NSExtension
NSExtensionAttributes
IntentsSupported
INSendMessageIntent
...
- Das Haupt-App-Ziel enthält Folgendes in seiner Info.plist
Code: Select all
NSUserActivityTypes
INSendMessageIntent
...
- Die Funktion „Kommunikationsbenachrichtigungen“ wurde im Haupt-App-Ziel hinzugefügt, ebenso wie „Push-Benachrichtigungen“ und „Hintergrundmodi“ ( mit „Remote-Benachrichtigungen“ aktiviert) und „Siri“.
- Kann irrelevant sein, aber ich habe irgendwo gesehen, dass der Bundle-ID der Diensterweiterung die Bundle-ID der Haupt-App vorangestellt werden muss Ziel, das auch das ist Fall.