Лучший подход к представлению модалов после выхода приложения на передний план - PullRequest
0 голосов
/ 27 сентября 2018

Пользователи в моем приложении iOS имеют два состояния: вошли в систему и вышли из нее.Я использую Firebase SDK для аутентификации и доставки данных из базы данных в реальном времени.

Для зарегистрированных пользователей я хочу представить пользовательские модальные оповещения в приложении, если для этого оповещения выполняется определенное условие.Эти условия зависят от даты, то есть пользователи будут получать определенные оповещения в определенные даты, но не в другие.Это означает, что условия не определяются из пользовательского ввода.

Когда сервер возвращает данные о том, что условия выполнены для определенного предупреждения, существуют разные состояния.Вот о чем я могу думать:

  • Пользователи могут открывать приложение из прерванного состояния, когда аутентификация восстанавливается во время инициализации приложения, то есть выход из системы -> вход в систему.
  • Пользователи могут открывать приложение из фонового состояния.
  • Пользователи могут быть внутри приложения, пока меняется дата.

Мой вопрос: какая из лучших практик здесь?Я рассматриваю три подхода (может быть, ни один из них не самый лучший):

  1. Singleton - есть синглтон AlertManager, который прослушивает события, удовлетворяющие условиям оповещения, а затем синглтон перемещается по дереву контроллера представления, чтобы найтитекущий контроллер вида переднего плана для представления предупреждения
  2. Протокол - иметь протокол, который принят всеми контроллерами представления.Не совсем уверен, как бы я поступил об этом, так как я не могу переопределить метод viewDidAppear из реализации протокола по умолчанию.Не уверен, что этот подход жизнеспособен по этой причине.
  3. Наследование - Имейте базовый класс ViewController, который наследуется всеми пользовательскими контроллерами представления.Этот базовый класс обрабатывает проверки предупреждений в своем методе viewDidAppear.

Тангенциальный вопрос, который необходимо рассмотреть, заключается в том, как мне следует обращаться со случаем, когда уже есть представленный контроллер представления, когда мне нужно представить контроллер представления предупреждения?Я не хочу прерывать пользователя, поэтому я бы хотел поставить в очередь предупреждение, которое будет представлено после того, как текущий представленный контроллер представления отклонен.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете использовать эту функцию в AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
        [UIApplicationLaunchOptionsKey: Any]?) -> Bool

Пример для вашего случая

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions:
    [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    //Check if User logged in 
    if logged 
    {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = 
        storyboard.instantiateViewController(withIdentifier: "yourLoggedinVC")
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()
    } else {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = 
        storyboard.instantiateViewController(withIdentifier: "yourLoggedOutVC")
        self.window?.rootViewController = initialViewController
        self.window?.makeKeyAndVisible()

}

...