Я недавно начал добавлять уведомления pu sh в свое приложение, и большое количество копаний дало мне возможность делать уведомления от устройства к устройству pu sh, а затем иметь возможность выполнять уведомления функция, когда пользователь нажимает на уведомление, которое он получает. Примером может быть то, что как только пользователь нажимает на уведомление pu sh, новый контроллер представления помещается поверх стека навигации, и пользователь переносится в этот контроллер представления. Теперь у меня вопрос: как я могу теперь выполнять разные функции для разных уведомлений?
Например, в моем приложении пользователь может отправлять / получать запросы на дружбу, сообщения и совпадения. Для каждого из этих уведомлений приложение должно вставлять sh отдельный контроллер представления в стек навигации.
Я использую Firestore для своей базы данных, и мое приложение является программным c, а не раскадровкой, и я не использую делегат сцены.
До сих пор я искал документацию Apple, переполнение стека и на YouTube, но изо всех сил пытаюсь найти четкое решение.
Ближайший пост, который я смог найти, был этот пост: Как добавить различные действия в зависимости от категории, определенной в полезной нагрузке входящего удаленного уведомления? Swift ОБНОВЛЕНО
, и я также нашел эту документацию несколько полезной: https://developer.apple.com/documentation/usernotifications/declaring_your_actionable_notification_types
Но, несмотря на то, что эти сообщения близки к тому, что я хочу, они сосредоточены на У пользователя, выполняющего несколько действий (например, уведомление, предупреждающее пользователя о встрече), будут варианты «принять» или «отклонить», тогда как я хочу просто позволить пользователю нажать на уведомление, которое не имеет действий, и принять его. соответствующему контроллеру просмотра (т. е. если они получают запрос на добавление в друзья, они перенаправляются на контроллер friendsList).
Я попытался повторить шаги, аналогичные тем, которые описаны в постах, которые я связал выше, но с моей целью , например, пытаясь:
func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
let category = UNNotificationCategory(identifier: "FRIEND_REQUEST", actions: [], intentIdentifiers: [], options: [])
UNUserNotificationCenter.current().setNotificationCategories([category])
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let identifier = response.actionIdentifier
switch identifier {
case UNNotificationDismissActionIdentifier:
print("The notification was dismissed")
completionHandler()
case UNNotificationDefaultActionIdentifier:
if response.actionIdentifier == "FRIEND_REQUEST" {
ChatLogController.select()
} else {
EditProfileController.select()
}
completionHandler()
default:
print("The default case was called")
completionHandler()
}
}
Параметры, которые я отправляю:
let paramString: [String : Any] = ["to" : token,
"collapse_key" : "type_a",
"click_action" : "FRIEND_REQUEST",
"notification" : ["title" : title,
"body" : body],
"data" : ["user" : "test_id"]
]
Примечание: «click_action» - это просто пожарный магазин, эквивалентный «category» (у меня есть также пытался использовать категорию вместо click_action в качестве параметра) - но пока ни одна из моих попыток не работает, приведенный выше код просто отправляет меня в EditProfileController, так что я предполагаю, что не опознаете в уведомлении категорию «FRIENDS_REQUEST» - есть идеи?
Приветствия.