在退出应用程序时,通过远程通知显示uiviewcontroller

时间:2015-05-21 13:37:22

标签: ios iphone swift apple-push-notifications

我正在尝试在收到远程推送通知时显示特定的viewcontroller。我已将所有代码添加到方法didReceiveRemoteNotification中:

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

我添加了以下代码:

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()
    }
}

当应用程序处于后台时,一切正常,但是当应用程序退出时,我收到远程通知,它只会启动应用程序。 是否有一个方法可以在之前退出应用程序之前调用?

1 个答案:

答案 0 :(得分:2)

当您的应用程序退出应用程序后启动时,同时您收到了远程通知,然后{Apperle]中的didFinishLaunchingWithOptions是第一个启动应用程序的方法,检查您是否收到任何通知并相应地执行您的操作。

您必须在app delegate中查找此方法: -

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

现在检查您的应用是否已收到任何推送通知

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");
    }