应用程序关闭时如何在ios中接收本地通知

时间:2014-08-01 07:33:59

标签: ios objective-c storyboard uilocalnotification

我正在使用警报系统的本地通知,但我在处理本地通知时遇到一些问题,当我点击警报通知时(当应用关闭时)它启动应用程序但问题是它应该转到didFinishLaunchingWithOptions函数,但它没有进入appDelegate中的任何函数内部(我使用了断点来检查)。 我使用故事板和导航控制器,我想在应用关闭时通知点击打开特定的视图控制器。

但是当我正常启动该应用时,它会进入didFinishLaunchingWithOptions功能。

请建议。

任何帮助都将不胜感激。

的main.m

#import "DEMOAppDelegate.h"
int main(int argc, char * argv[])
{
    @autoreleasepool 
    {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([DEMOAppDelegate class]));
    }
}

DEMOAppDelegate.m

#import "DEMOAppDelegate.h"        
@implementation DEMOAppDelegate        
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    UILocalNotification *localNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotif) 
    {
        NSLog(@"Recieved Notification %@",localNotif);
    }
    return YES;
}                                   
- (void)applicationWillResignActive:(UIApplication *)application 
{
}
- (void)applicationDidEnterBackground:(UIApplication *)application 
{
}
- (void)applicationWillEnterForeground:(UIApplication *)application 
{
}
- (void)applicationDidBecomeActive:(UIApplication *)application 
{
}
- (void)applicationWillTerminate:(UIApplication *)application 
{
}
-(void) application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:notification.alertAction message:notification.alertBody delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
}
@end

1 个答案:

答案 0 :(得分:4)

这是不可能的,当您的应用未运行通知时,它不会直接对通知作出反应。

仅当用户通过此通知打开您的应用时,

didFinishLaunchingWithOptions才会包含有关通知的信息。如果他取消它并通过仪表板图标打开您的应用程序,您将不会在此方法中看到这一点。

如果您需要对上次用户打开应用时发生的所有通知作出反应,那么不幸的是,只能建立自己的跟踪逻辑并根据时间获取过去的所有事件。 此外,甚至无法获得您为应用安排的通知列表,因此通常建立基于时间的事件逻辑并在其上使用通知是个好主意,但所有逻辑都在您自己的时间发生基于代码。这种方式即使用户禁用通知,您的关键逻辑也能正常工作。

当应用程序在后台运行时,您将通过application:didReceiveRemoteNotification收到通知。您可以在应用程序内收集这些通知,并在用户从后台返回应用程序后,如果您想在应用程序内部执行任何特定操作,则在applicationDidBecomeActive处理这些通知。