У меня есть приложение, которое реализует удаленные уведомления через API обмена сообщениями Firebase. В этом приложении я реализовал расширение службы уведомлений, которое, среди прочего, реализует UNNotificationActions.
В одном из этих действий я реализовал поле ввода, где вы можете написать что-то, что затем должно быть отправлено в firestore.
Я пытался реализовать это, но безуспешно. Итак, мой вопрос: как я могу написать в firestore из богатого уведомления, работающего в фоновом режиме, - возможно ли это вообще?
Моя реализация выглядит так:
let likeAction = UNNotificationAction(identifier: "likeAction", title: "Like", options: [])
let commentAction = UNTextInputNotificationAction(identifier: "commentAction", title: "Comment", options: [UNNotificationActionOptions.authenticationRequired], textInputButtonTitle: "Send", textInputPlaceholder: "Type your message")
let category = UNNotificationCategory(identifier: "posts", actions: [likeAction, commentAction], intentIdentifiers: [], options: [])
UNUserNotificationCenter.current().setNotificationCategories([category])
Затем в AppDelegate я реализую функцию для запуска всякий раз, когда это запускается следующим образом:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
switch response.actionIdentifier {
case "commentAction":
guard let data = response.notification.request.content.userInfo["data"] as? [String: Any] else { return }
guard
let channelName = data["channelName"],
let postId = data["postId"]
else { return }
if let message = response as? UNTextInputNotificationResponse {
let documentPath = "\(channelName)/\(postId))"
let post = Post()
post.documentPath = documentPath
post.addComment(text: message.userText, postDocumentPath: documentPath)
}
Я отладил код, и метод post.addComment()
действительно срабатывает, и каждое поле имеет значение. Когда я проверяю базу данных, в нее ничего не вставляется. Консоль распечатывает это, что я не знаю, связано ли это с проблемой, я не смог найти что-либо в Интернете об этих строках:
dnssd_clientstub delivery_request ОШИБКА: write_all (21, 65 байт) не удалось
nssd_clientstub read_all(26) НЕФУНКЦИОНАЛЬНЫЙ
При запуске метода post не возникает ошибок от firebase.
Это была первоначальная информация, о которой я мог подумать. Я могу предоставить больше кода или информации, если это необходимо.
Обновить
Я обнаружил, что если я нажму кнопку на экране блокировки, но с iPhone в разблокированном состоянии, ничего не произойдет — как только я проведу пальцем вверх, и появится приложение, запрос будет отправлен. Это действительно кажется фоновой проблемой.
С уважением Крис