我正在使用警报系统的本地通知,但我在处理本地通知时遇到一些问题,当我点击警报通知时(当应用关闭时)它启动应用程序但问题是它应该转到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
答案 0 :(得分:4)
这是不可能的,当您的应用未运行通知时,它不会直接对通知作出反应。
仅当用户通过此通知打开您的应用时, didFinishLaunchingWithOptions
才会包含有关通知的信息。如果他取消它并通过仪表板图标打开您的应用程序,您将不会在此方法中看到这一点。
如果您需要对上次用户打开应用时发生的所有通知作出反应,那么不幸的是,只能建立自己的跟踪逻辑并根据时间获取过去的所有事件。 此外,甚至无法获得您为应用安排的通知列表,因此通常建立基于时间的事件逻辑并在其上使用通知是个好主意,但所有逻辑都在您自己的时间发生基于代码。这种方式即使用户禁用通知,您的关键逻辑也能正常工作。
当应用程序在后台运行时,您将通过application:didReceiveRemoteNotification
收到通知。您可以在应用程序内收集这些通知,并在用户从后台返回应用程序后,如果您想在应用程序内部执行任何特定操作,则在applicationDidBecomeActive
处理这些通知。