当用户使用iOS 13 Swift 5点击推送通知时,在特定视图中打开应用程序
我的应用允许向用户发送远程推送通知。当用户点击推送通知时,如何使其在特定视图控制器中打开?我希望应用程序打开并导航到特定的视图控制器,具体取决于收到的推送通知。您必须使用“func应用程序”中的启动选项检查应用程序何时处于关闭状态(u应用程序:UIApplication,didfishlaunchingwithoptions launchOptions:[uiapplicationaunchoptions:Any]?)->Bool{:当用户使用iOS 13 Swift 5点击推送通知时,在特定视图中打开应用程序,ios,swift,ios13,xcode11,Ios,Swift,Ios13,Xcode11,我的应用允许向用户发送远程推送通知。当用户点击推送通知时,如何使其在特定视图控制器中打开?我希望应用程序打开并导航到特定的视图控制器,具体取决于收到的推送通知。您必须使用“func应用程序”中的启动选项检查应用程序何时处于关闭状态(u应用程序:UIApplication,didfishlaunchingwithoptions launchOptions:[uiapplicationaunchoptions:Any]?)->Bool{: if let option = launchOptions
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..")
}
遵循本教程,如果用户已经启动应用程序并且应用程序现在正在后台运行,则不会调用上述方法。