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