Hannes Van den Berghe
Hannes Van den Berghe

Reputation: 185

Show uiviewcontroller from remote notification when app is quitted

I'm trying to show a specific viewcontroller when I receive a remote push notification. I've added all of my code into the method didReceiveRemoteNotification:

func application(application: UIApplication, didReceiveRemoteNotification userinfo: [NSObject: AnyObject])

I've added following code:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
    let code = (userInfo["aps"] as! [String: AnyObject])
    // Call to retrieve blog
    if let blog = code["b"] as? NSNumber {
        let blogId = blog as! Int

        // Show blog from notification
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
        var controller = mainStoryboard.instantiateViewControllerWithIdentifier("blogCtrl") as! BlogController
        controller.blogId = blogId
        var rootController = mainStoryboard.instantiateViewControllerWithIdentifier("navCtrl1") as! UINavigationController
        self.window?.rootViewController = rootController
        rootController.pushViewController(controller, animated: true)
        self.window?.makeKeyAndVisible()
    }
    if let tonic = code["t"] as? NSNumber {
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
        var controller = mainStoryboard.instantiateViewControllerWithIdentifier("tonicDetail") as! TonicDetailController
        controller.tonicId = tonic as! Int
        var rootController = mainStoryboard.instantiateViewControllerWithIdentifier("navCtrl1") as! UINavigationController
        self.window?.rootViewController = rootController
        rootController.pushViewController(controller, animated: true)
        self.window?.makeKeyAndVisible()
    }
    if let gin = code["g"] as? NSNumber {
        let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
        var controller = mainStoryboard.instantiateViewControllerWithIdentifier("GinDetail") as! GinDetailController
        controller.ginId = gin as! Int
        var rootController = mainStoryboard.instantiateViewControllerWithIdentifier("navCtrl1") as! UINavigationController
        self.window?.rootViewController = rootController
        rootController.pushViewController(controller, animated: true)
        self.window?.makeKeyAndVisible()
    }
}

When the app is in background everything works but when the app is quited, and I receive a remote notification it only starts up the application. Is there a method which can be called if the application was quited before?

Upvotes: 3

Views: 337

Answers (1)

Vizllx
Vizllx

Reputation: 9246

When your app launches after quitting the app, in the meanwhile you got remote notification, then didFinishLaunchingWithOptions is first method in AppDelegate which fires on launching the app, check whether you have received any notification or not and perform your operation accordingly.

You must look for this method in app delegate:-

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Now check whether your app has received any push notification or not

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (notification) {
        NSLog(@"app received a notification %@",notification);
        [self application:application didReceiveRemoteNotification:(NSDictionary*)notification];
    }else{
        NSLog(@"app did not receive a notification");
    }

Upvotes: 2

Related Questions