Пользователи в моем приложении iOS имеют два состояния: вошли в систему и вышли из нее.Я использую Firebase SDK для аутентификации и доставки данных из базы данных в реальном времени.
Для зарегистрированных пользователей я хочу представить пользовательские модальные оповещения в приложении, если для этого оповещения выполняется определенное условие.Эти условия зависят от даты, то есть пользователи будут получать определенные оповещения в определенные даты, но не в другие.Это означает, что условия не определяются из пользовательского ввода.
Когда сервер возвращает данные о том, что условия выполнены для определенного предупреждения, существуют разные состояния.Вот о чем я могу думать:
- Пользователи могут открывать приложение из прерванного состояния, когда аутентификация восстанавливается во время инициализации приложения, то есть выход из системы -> вход в систему.
- Пользователи могут открывать приложение из фонового состояния.
- Пользователи могут быть внутри приложения, пока меняется дата.
Мой вопрос: какая из лучших практик здесь?Я рассматриваю три подхода (может быть, ни один из них не самый лучший):
- Singleton - есть синглтон AlertManager, который прослушивает события, удовлетворяющие условиям оповещения, а затем синглтон перемещается по дереву контроллера представления, чтобы найтитекущий контроллер вида переднего плана для представления предупреждения
- Протокол - иметь протокол, который принят всеми контроллерами представления.Не совсем уверен, как бы я поступил об этом, так как я не могу переопределить метод viewDidAppear из реализации протокола по умолчанию.Не уверен, что этот подход жизнеспособен по этой причине.
- Наследование - Имейте базовый класс ViewController, который наследуется всеми пользовательскими контроллерами представления.Этот базовый класс обрабатывает проверки предупреждений в своем методе viewDidAppear.
Тангенциальный вопрос, который необходимо рассмотреть, заключается в том, как мне следует обращаться со случаем, когда уже есть представленный контроллер представления, когда мне нужно представить контроллер представления предупреждения?Я не хочу прерывать пользователя, поэтому я бы хотел поставить в очередь предупреждение, которое будет представлено после того, как текущий представленный контроллер представления отклонен.