У меня есть приложение, которое реализует удаленные уведомления через API Firebase Messaging.В этом приложении я реализовал расширение службы уведомлений, которое, среди прочего, реализует действия 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 upload_request ОШИБКА: write_all (21,65 байт) не удалось
nssd_clientstub read_all (26) DEFUNCT
При запуске метода post не возникает ошибка из firebase.
Это была исходная информация Iмог придумать.Я могу предоставить больше кода или информации, если это необходимо.
Обновление
Я обнаружил, нажимаю ли я кнопку, когда на экране блокировки, но с iPhone вразблокированное состояние, ничего не происходит - как только я проведу вверх, и приложение покажет, запрос отправляется.Это действительно похоже на фоновую проблему.
С уважением, Крис