如何在应用程序未运行时处理远程通知

时间:2015-09-03 13:46:24

标签: ios objective-c

如果我的应用程序在前台或后台运行,则此工作正常。我收到通知并将其保存在本地数据库中。但是如果应用程序从后台杀死它会收到远程通知,但不会调用以下方法。问题是如果我点击任何一个通知,只有该通知将保存在本地数据库中。

if(canPerformSegueWithIdentifier("segueFoo")) {
  self.performSegueWithIdentifier("segueFoo", sender: nil)
}
else {
  self.performSegueWithIdentifier("segueBar", sender: nil)
}


func canPerformSegueWithIdentifier(identifier: NSString) -> Bool {
    let templates:NSArray = self.valueForKey("storyboardSegueTemplates") as! NSArray
    let predicate:NSPredicate = NSPredicate(format: "identifier=%@", identifier)

    let filteredtemplates = templates.filteredArrayUsingPredicate(predicate)
    return (filteredtemplates.count>0)
}

2 个答案:

答案 0 :(得分:1)

从Apple文档中,如果用户硬关闭应用程序,则不会调用该方法。

  

此外,如果您启用了远程通知后台模式,   系统启动您的应用程序(或从暂停状态唤醒它)   并在远程通知时将其置于后台状态   到达。 但是,系统不会自动启动您的应用   用户强行退出。在这种情况下,用户必须重新启动   您的应用程序或在系统尝试启动之前重新启动设备   你的应用程序会再次自动。

答案 1 :(得分:0)

如果要从viewDidLoad启动特定的有效负载字典,则只需调用以下内容:

UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

你以这种方式得到userInfo

NSString *msgType = [localNotif objectForKey:@"messageType"];

现在你可以采取相应的行动。这仅适用于您在标题中说明的情况。当应用未运行时#39; (终止)