Как открыть ВК на локальное уведомление, когда приложение закрыто - PullRequest
0 голосов
/ 04 декабря 2018

Hy Я новичок в iOS, но каким-то образом мне удалось выполнить некоторые задачи.Я работаю над приложением, которое устанавливает напоминания для пользователя.Поэтому для этого я использую локальные уведомления (UNUserNotificationCenterDelegate).

Все работает хорошо и хорошо.Я написал некоторый код, я получаю уведомление в назначенное время и обработал следующие случаи.

  • Когда приложение в фоновом режиме
  • Когда приложение находится в forground.

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

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

Мне кажется, я совершенно ясно понимаю, чего я хочу и что происходит.Есть ли какие-либо изменения, чтобы сделать это.Я знаю, что это возможно, поскольку Whats App и другие приложения тоже это делают.Пожалуйста, помогите мне в этом....

Примечание: Я использую уведомления пользователя (локальное уведомление), а цель развертывания - 10,3

Обновление: Я видел это ссылка имеет ту же потребность, что и моя, но я не знаю, что предлагает выбранный ответ, так как я новичок в iOS, поэтому я не уверен, что и как делать:

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Итак, ваша проблема в том, что приложение убито или неактивно, а затем, когда пользователь нажимает на уведомление, появляется экран напоминания, верно?

Вот случай: Уведомление показывает (неактивно / убито) ->нажмите уведомление -> всплеск -> экран напоминания.

Вы должны сохранить данные, которые вы хотите отобразить в уведомлении.iOS сохранит все данные уведомлений в remoteNotification.

Итак, когда пользователь открывает приложение из неактивного, первое, что будет вызвано, - launchOption в AppDelegate.

Вот пример:

    if launchOptions != nil {
    // get data from notificaioton when app is killed or incative
           if let userInfo = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary  {
                   // Do what you want, you can set set the trigger to move it the screen as you want, for your case is to reminder screen
                }
            }
0 голосов
/ 04 декабря 2018

Когда ваше приложение запускается с помощью LocalNotification, будет вызван ваш UNUserNotificationCenterDelegate метод userNotificationCenter didReceive response.

Поэтому я бы рекомендовал вам представить ваше уведомление поверх текущего контроллера представления, как показано ниже.

//Add this extension in any of your class
extension UIApplication {

@objc class func topViewController(_ base: UIViewController?) -> UIViewController? {

    var baseController = base

    if baseController == nil{

        baseController = UIApplication.shared.keyWindow?.rootViewController
    }

    if let nav = baseController as? UINavigationController {
        return topViewController(nav.visibleViewController)
    }

    if let tab = baseController as? UITabBarController {
        if let selected = tab.selectedViewController {
            return topViewController(selected)
        }
    }

    return baseController
}

}

//In your `userNotificationCenter didReceive response` method
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {


    if response.actionIdentifier == "YourIdentifier"{

        let controllerToPresent = MyNotificationViewController(nibName: "MyNotificationViewController", bundle: nil)
        controllerToPresent.notificationInfo = response.notification.request.content.userInfo

        //If navigation flow needed, add controllerToPresent to nav controller
        let navConroller = UINavigationController(rootViewController: controllerToPresent)
        UIApplication.topViewController(nil)?.present(navConroller, animated: true, completion: nil)

        //If navigation flow not needed, present directly
        UIApplication.topViewController(nil)?.present(controllerToPresent, animated: true, completion: nil)
    }

    completionHandler()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...