我在我的应用程序(firebase)中发送通知,因此在didReceiveRemoteNotification中,我将用户引导到应用程序中的新位置(其中一个导航控制器中的视图控制器,位于选项卡控制器内)。
在我的标签控制器的第一个视图中,如果用户已经通过位置服务和推送通知视图控制器,它总是检查UserDefaults(这是他们接受或拒绝权限的地方)。如果用户没有通过这些视图控制器(就像他们第一次启动应用程序一样),它将转到相应的视图控制器(图像中的segue 1和2)。问题是当它分割到位置服务或推送通知视图控制器时,我的didReceiveRemoteNotification中的标签栏控制器引用似乎不起作用。这意味着当我按下通知时,如果用户位于“位置服务”或“推送通知”中,则无法正确导航选项卡控制器。如果用户从未必须通过位置服务或推送通知,它就可以工作。这就是为什么我认为根控制器出于某种原因切换到其中一个如果用户通过它。
简单明了,我只想让我的标签栏控制器引用在我的AppDelegate中工作。为什么只有在用户通过位置服务或推送通知时才能正常工作?这是我的代码:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
let state = UIApplication.shared.applicationState
if(state == .active) {
// Create local notification
} else {
if let businessID = userInfo["business_id"] as? String {
Globals.notificationBusinessId = Int(businessID)!
}
if let businessName = userInfo["business_name"] as? String {
Globals.notificationBusinessName = "\(businessName)"
}
if let itemID = userInfo["item_id"] as? String {
Globals.notificationItemID = Int(itemID)!
}
if let navigationLevel = userInfo["navigation_level"] as? String {
Globals.notificationNavigationLevel = Int(navigationLevel)!
}
Globals.popToBusinessesController = true
myTabBar.selectedIndex = 1
myTabBar.selectedIndex = 2
}
}
答案 0 :(得分:0)
如果点击通知didReceiveRemoteNotification
将不会被调用,只有在应用处于活动状态时收到通知时才会调用此通知。
如果远程通知到达时应用程序未运行,该方法将启动应用程序并在启动选项字典中提供相应的信息。
您可以查看所有here