Objective c 检查等待通知

Objective c 检查等待通知,objective-c,ios,push-notification,Objective C,Ios,Push Notification,使用iOS 5和notification center,您可以让等待中的通知堆积起来,每个通知都有自己的数据和消息。当您的程序定期启动(不点击通知)时,是否有办法发现等待的通知,更重要的是与它们相关的数据 与此相关的另一个问题是,当推送通知到达并且您的应用程序处于后台时,应用程序:didReceiveLocalNotification:是否仍会被调用,或者它只是等待应用程序启动,然后您需要手动处理其中的启动数据应用程序:didFinishLaunchingWithOptions: 我的情况是,我

使用iOS 5和notification center,您可以让等待中的通知堆积起来,每个通知都有自己的数据和消息。当您的程序定期启动(不点击通知)时,是否有办法发现等待的通知,更重要的是与它们相关的数据

与此相关的另一个问题是,当推送通知到达并且您的应用程序处于后台时,
应用程序:didReceiveLocalNotification:
是否仍会被调用,或者它只是等待应用程序启动,然后您需要手动处理其中的启动数据
应用程序:didFinishLaunchingWithOptions:


我的情况是,我需要使用推送通知附带的数据更新一些核心数据模型,以便无论它们如何启动应用程序,我都希望这些更改得到反映。

根据我的经验,除了直接通过它们启动应用程序外,没有办法了解通知(在iOS 5上,这将在收到通知或通知中心的排队通知后立即进行)

另一种策略是使用图标徽章


如果您在接收通知时标记应用图标,则可以在每次启动应用时检查该号码,然后执行所需操作。

当弹出通知时,您可以查看该通知或取消该通知。如果用户已取消通知,您可以在下一次进入应用时检查该号码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    if( localNotif )    {
        // Do some stuff
        application.applicationIconBadgeNumber = 0;  // Reset num of notifications on app icon
    }
}
如果您在特定应用程序中收到通知,或者您选择确认本地通知,则会触发此方法:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

BOOL inApp = [application applicationState] == UIApplicationStateActive;

    if( inApp ) { // they got this in the app
        //Do some stuff in the app
    }
    else {
        // They acknowledged the notification out of the app and here they are
        // Do some other stuff
    }

    application.applicationIconBadgeNumber = 0;
}
这使您能够很好地覆盖所有具有本地通知的场景,包括:

  • 收到通知后,用户将取消。请稍后在“使用选项完成启动”中进行检查
  • 通知已确认,应用程序未打开。签入didfishlaunchingwithoptions
  • 通知已确认,应用程序处于后台。didReceiveLocalNotification:
  • 在应用程序中显示通知didReceiveLocalNotification: