如何在SwiftUI中的通知点击打开特定视图?

如何在SwiftUI中的通知点击打开特定视图?,swift,swiftui,Swift,Swiftui,我试图在点击通知后将用户发送到DetailView。我已经按照这样的多个指示进行了操作。然而,当我测试它时,点击通知仍然会使我进入错误的视图(settingsView) 在应用程序代理中,我当前有此设置(用于下面的更新代码滚动): class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { func application(_ application: UIApplicati

我试图在点击通知后将用户发送到DetailView。我已经按照这样的多个指示进行了操作。然而,当我测试它时,点击通知仍然会使我进入错误的视图(settingsView)

在应用程序代理中,我当前有此设置(用于下面的更新代码滚动)

class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        registerBackgroundTasks()
        FirebaseApp.configure()
        UNUserNotificationCenter.current().delegate = self
    
        
                return true
    }

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

        if response.actionIdentifier == "open" {
                NotificationCenter.default.post(name: NSNotification.Name("DetailViewNew"), object: nil)
            }
        
        completionHandler()
    }
在SettingsDetailView中(触发和设置通知的位置)

在我的DetailView中(我希望用户在点击通知时登陆)

编辑 我删除了类别和操作,因为我只想让用户点击通知或取消通知(不需要自定义操作)

当我这样做时,如果response.actionIdentifier==UNNotificationDefaultActionIdentifier确实会调用完成处理程序
。现在的问题是如何路由它,以便在点击时打开DetailView

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

    if response.actionIdentifier == UNNotificationDismissActionIdentifier {
            print ("Message Closed")
        }
        else if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
            print ("App is Open")
            NotificationCenter.default.post(name: NSNotification.Name("DetailViewNew"), object: nil)
            
        }

    
    completionHandler()
}

有什么建议吗?谢谢。

这里可能会出现很多问题。如果我理解正确,您正在使用通知中心导航到应用程序的另一个部分,我觉得这很奇怪。您确认您的.onReceive回调被触发了吗?我的目标是在点击通知后将用户引导到DetailView。我看到了另一个建议使用通知中心的堆栈问题。你有其他的建议来实现这一点吗?我检查过了,当前没有触发.OnReceive…我不熟悉SwiftUI,所以这可能是一种模式。如果没有触发.onReceive,那么问题似乎出在通知的某个地方-是否调用了userNotificationCenter:didReceiveResponse方法?这里可能会出现多个问题。如果我理解正确,您正在使用通知中心导航到应用程序的另一个部分,我觉得这很奇怪。您确认您的.onReceive回调被触发了吗?我的目标是在点击通知后将用户引导到DetailView。我看到了另一个建议使用通知中心的堆栈问题。你有其他的建议来实现这一点吗?我检查过了,当前没有触发.OnReceive…我不熟悉SwiftUI,所以这可能是一种模式。如果没有触发.onReceive,那么问题似乎出在通知的某个地方-是否调用了userNotificationCenter:didReceiveResponse方法?
struct DetailViewNew: View {
    let poemPublisher = NotificationCenter.default.publisher(for: NSNotification.Name("DetailViewNew"))
    @State private var showScreen = false
    
    var body: some View {
        ZStack{
            Text("Text")
        }
        .onReceive(poemPublisher) { notification in
           self.showScreen = true
        }
    }
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    if response.actionIdentifier == UNNotificationDismissActionIdentifier {
            print ("Message Closed")
        }
        else if response.actionIdentifier == UNNotificationDefaultActionIdentifier {
            print ("App is Open")
            NotificationCenter.default.post(name: NSNotification.Name("DetailViewNew"), object: nil)
            
        }

    
    completionHandler()
}