Код: Выделить всё
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 {
}
}
p>
На данный момент я не добавлял изображение, так как хочу сначала получить минимальный пример работы, где отображается имя человека (хотя я также тестировал это с помощью жестко закодированный INImage(url: validURL) безуспешно), но этот код не работает.
Кроме того, у меня есть следующее:
- Файл Info.plist расширения службы уведомлений содержит следующее:
Код: Выделить всё
NSExtension
NSExtensionAttributes
IntentsSupported
INSendMessageIntent
...
- В Info.plist основного целевого приложения есть следующее:
Код: Выделить всё
NSUserActivityTypes
INSendMessageIntent
...
- В основную цель приложения добавлена возможность «Уведомления о связи», а также «Push-уведомления», «Фоновые режимы» ( с отмеченными «Удаленными уведомлениями») и «Siri».
- Может быть неважно, но я где-то видел, что перед идентификатором пакета расширения службы должен стоять префикс идентификатора пакета основного приложения. цель, которая также является случае.
ОБНОВЛЕНИЕ:
Я допустил грубую ошибку и сразу же сохранил автоматически сгенерированный код, вызывающий contentHandler, в функция. Удаление этой строки (которое я задокументировал ниже) исправляет это. Я продолжаю публиковать этот пост, чтобы помочь другим узнать обо всем остальном, что необходимо включить.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-ios-18
Мобильная версия