IOS: как открыть определенную страницу приложения, когда я нажимаю на push-уведомление - PullRequest
0 голосов
/ 27 июня 2018

Я разрабатываю приложение для IOS, которое получает push-уведомления. Можно ли открыть определенную страницу моего приложения при получении и щелкнуть уведомление?

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Вы будете получать управление в «didReceiveRemoteNotification» всякий раз, когда пользователь нажимает на уведомление.

 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let navigationController = storyboard.instantiateViewControllerWithIdentifier("DetailViewController") as! DetailViewController
    self.window?.rootViewController?.presentViewController(navigationController, animated: true, completion: {}) 
 }

Здесь вы также можете определить, находится ли приложение в активном состоянии или неактивно, и соответственно выполнить презентацию.

Так что получите rootViewController и представьте экран, который вам нужно показать. Также, если вам нужно поместить контроллер в уже представленный стек навигации, вы можете извлечь контроллер навигации из окна, а затем нажать на него определенный контроллер. Решение показать контроллер, который вам нужно представить, может быть получено из полученного userInfo.

Таким образом, вы можете открыть любой конкретный контроллер, который вы хотите.

0 голосов
/ 27 июня 2018

Наше приложение делает это, и, честно говоря, это боль в заднице. Но вот как мы это сделали:

  1. Наличие корневого контроллера представления, который обрабатывает все входящие уведомления (обычно через какой-либо источник данных или класс менеджера)
  2. Создайте объект модели для представления вашего уведомления и убедитесь, что у него есть свойство type.
  3. Создайте typedef enum для хранения различных видов уведомлений, которые может ожидать ваше приложение.
  4. Корневой контроллер представления должен реализовать метод с оператором switch, который включает тип обрабатываемого уведомления.
  5. Корневой контроллер представления может затем загрузить правильный контроллер представления для вашего уведомления, поэтому вы передаете объект уведомления в контроллер представления, если вам нужно использовать какую-либо информацию, хранящуюся в нем.

Это базовый обзор, и вам нужно будет настроить его в соответствии с вашим стеком навигации в зависимости от того, насколько он сложен. Может случиться так, что вам нужно передать этот объект уведомления вниз по уровням представления в вашей иерархии представлений (как мы должны это сделать).

В зависимости от того, как ваше приложение ведет себя, вам также может понадобиться рассмотреть, как ваше приложение обрабатывает возврат из фона на передний план, т.е. в каком состоянии оно находится, когда приложение получает свое уведомление, и сбрасывает ваш стек навигации, где это уместно, чтобы ваша навигация стек реагирует правильно.

0 голосов
/ 27 июня 2018

Да, это возможно, и это часть «вещи» под названием Deep Linking. По сути, идея заключается в том, чтобы спроектировать ваш проект так, чтобы каждый контроллер представления был сопоставлен с URL-схемой (да, эта строковая вещь). Так что в applicationDidFinish вы знаете, какой viewcontroller представляет какую URL-схему. Теперь отправьте данные в push-уведомлении по URL-схеме viewController, вы хотите, чтобы данные отображались. Напишите код в методе для анализа и передачи этого конкретного контроллера. Это основная грубая идея о том, как это будет / должно работать, я мог бы пропустить некоторые детали, но здесь - хорошая статья и учебник по ней, если вы хотите пройти.

Надеюсь, это поможет

...