2017-09-12 3 views
0

Ich baue Firebase Benachrichtigung in meiner App. Und es ist erfolgreich zu arbeiten. Aber ich möchte öffnen, wenn die Benachrichtigungsdaten gleich "Second" sind, dann öffne SecondViewController in meiner App. Wie kann ich? Ich benutze userInfo, aber ich habe es nicht getan.Firebase Benachrichtigung Swift 3 SecondViewController

Firebase Notification Special Data: { "view" : "Second" } 

Das ist mein voller AppDelegate Code. Vielen Dank. Es tut mir leid für mein Englisch.

import UIKit 
import Firebase 
import UserNotifications 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    static var shared: AppDelegate { return UIApplication.shared.delegate as! AppDelegate } 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     FirebaseApp.configure() 
     application.registerForRemoteNotifications() 
     requestNotificationAuthorization(application: application) 
     if let userInfo = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? NSDictionary { 

      NSLog("[RemoteNotification] applicationState: \(applicationStateString) didFinishLaunchingWithOptions for iOS9: \(userInfo)") 
      //TODO: Handle background notification 
     } 
     return true 
    } 

    var applicationStateString: String { 
     if UIApplication.shared.applicationState == .active { 
      return "active" 
     } else if UIApplication.shared.applicationState == .background { 
      return "background" 
     }else { 
      return "inactive" 
     } 
    } 

    func requestNotificationAuthorization(application: UIApplication) { 
     if #available(iOS 10.0, *) { 
      UNUserNotificationCenter.current().delegate = self 
      let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] 
      UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: {_, _ in }) 
     } else { 
      let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) 
      application.registerUserNotificationSettings(settings) 
     } 
    } 
} 

@available(iOS 10, *) 
extension AppDelegate : UNUserNotificationCenterDelegate { 
    // iOS10+, called when presenting notification in foreground 
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { 
     let userInfo = notification.request.content.userInfo 
     NSLog("[UserNotificationCenter] applicationState: \(applicationStateString) willPresentNotification: \(userInfo)") 
     //TODO: Handle foreground notification 
     completionHandler([.alert]) 
    } 

    // iOS10+, called when received response (default open, dismiss or custom action) for a notification 
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
     let userInfo = response.notification.request.content.userInfo 
     NSLog("[UserNotificationCenter] applicationState: \(applicationStateString) didReceiveResponse: \(userInfo)") 
     //TODO: Handle background notification 
     completionHandler() 
    } 
} 

extension AppDelegate : MessagingDelegate { 
    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { 
     NSLog("[RemoteNotification] didRefreshRegistrationToken: \(fcmToken)") 
    } 

    // iOS9, called when presenting notification in foreground 
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) { 

     NSLog("[RemoteNotification] applicationState: \(applicationStateString) didReceiveRemoteNotification for iOS9: \(userInfo)") 
     if UIApplication.shared.applicationState == .active { 
      //TODO: Handle foreground notification 
     } else { 
      //TODO: Handle background notification 
     } 
    } 
} 
+0

Wenn Sie nur zeigen wollen ... macht es RootViewController ... sonst schieben Sie es in Ihrer Navigationssteuerung. .. Sie können das Objekt des Fensters direkt verwenden. Othewrise post eine lokale NSNotification mit Daten in Ihrer ursprünglichen Ansicht Controller – Naresh

+0

Vielen Dank für die Antwort. Könnten Sie Beispielcode schreiben? –

+0

https://stackoverflow.com/questions/24049020/nsnotificationcenter-addobserver-in-swift und https://stackoverflow.com/questions/30956476/swift-instantiating-a-navigation-controller-without-storyboards-in -app-Delegat – Naresh

Antwort

0

Benachrichtigungsdaten von Userinfo
innerhalb userNotificationCenter diesen Code hinzufügen ...

let str:String = (userInfo["gcm.notification.imType"] as? String)! 

    switch str { 
    case "FIRST": 

     let rootViewController = self.window!.rootViewController as! UINavigationController 

      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let firstViewController = storyboard.instantiateViewController(withIdentifier: "FIRSTID") as! MessagesTableViewController 

      rootViewController.pushViewController(firstViewController, animated: true) 

     case "SECOND": 

     let rootViewController = self.window!.rootViewController as! UINavigationController 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let secondViewController = storyboard.instantiateViewController(withIdentifier: "SECONDID") as! SecondViewController 

     rootViewController.pushViewController(secondViewController, animated: true) 
default: 
    print("Type is something else") 

}