Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当用户使用iOS 13 Swift 5点击推送通知时,在特定视图中打开应用程序_Ios_Swift_Ios13_Xcode11 - Fatal编程技术网

当用户使用iOS 13 Swift 5点击推送通知时,在特定视图中打开应用程序

当用户使用iOS 13 Swift 5点击推送通知时,在特定视图中打开应用程序,ios,swift,ios13,xcode11,Ios,Swift,Ios13,Xcode11,我的应用允许向用户发送远程推送通知。当用户点击推送通知时,如何使其在特定视图控制器中打开?我希望应用程序打开并导航到特定的视图控制器,具体取决于收到的推送通知。您必须使用“func应用程序”中的启动选项检查应用程序何时处于关闭状态(u应用程序:UIApplication,didfishlaunchingwithoptions launchOptions:[uiapplicationaunchoptions:Any]?)->Bool{: if let option = launchOptions

我的应用允许向用户发送远程推送通知。当用户点击推送通知时,如何使其在特定视图控制器中打开?我希望应用程序打开并导航到特定的视图控制器,具体取决于收到的推送通知。

您必须使用“func应用程序”中的启动选项检查应用程序何时处于关闭状态(u应用程序:UIApplication,didfishlaunchingwithoptions launchOptions:[uiapplicationaunchoptions:Any]?)->Bool{:

 if let option = launchOptions {
    let info = option[UIApplication.LaunchOptionsKey.remoteNotification]
         if (info != nil) {
            self.goAnotherVC()
     }
}
在视图中,是否加载了着陆VC设置的观察者

 NotificationCenter.default.addObserver(self, selector: #selector(self.goToVc(notification:)), name:NSNotification.Name(rawValue:identifier), object: nil)
选择器方法:

 @objc func goToVc(notification:Notification) {
     let storyboard = UIStoryboard(name: "Main", bundle: nil)
     let vc = storyboard.instantiateViewController(withIdentifier:"landingVC") as! landingVC
     self.navigationController?.pushViewController(vc, animated: true)  
}
应用程序内代理:

func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
     NotificationCenter.default.post(name:NSNotification.Name(identifier), object: userInfo)
  }

您可以在收到通知且用户单击通知后触发通知

与通知一起,您可以传递值,该值稍后将用于标识需要导航到哪个视图控制器

创建一个类,该类将负责所有推送通知导航处理。您可以将其命名为PushNotificationHandler。让PushNotificationHandler处理所有导航到视图控制器的逻辑

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
} 
  • 使用上述委托方法从深度链接获取值
  • 使用值触发通知
  • 在类中处理通知

    • 这个答案适用于iOS 13+

      在AppDelegae中:

      func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
         
              NotificationCenter.default.post(name: NSNotification.Name(identifier), object: nil)
              completionHandler()
      }
      
      在着陆的
      viewdiload
      视图控制器
      中:

      override func viewDidLoad() {
              super.viewDidLoad()
              
              NotificationCenter.default.addObserver(self, selector: #selector(self.showChatController(notification:)), name:NSNotification.Name(rawValue: "noti"), object: nil)    
      }
      
      在着陆
      viewController
      中添加以下选择器方法:

      @objc
      func showChatController(notification: Notification) {
      print("DEBUG: show chat controller here..")
              
      }
      

      遵循本教程,如果用户已经启动应用程序并且应用程序现在正在后台运行,则不会调用上述方法。