2011-10-31 94 views
8

有了iOS 5和通知中心,您可以等待通知,每個通知都有自己的數據和消息。當您的程序定期啓動(無需點擊通知)以發現等待通知,更重要的是與它們相關的數據有什麼方法嗎?檢查是否有等待通知

與此相關的另一個問題是,當推送通知進來並且您的應用程序在後臺時,application:didReceiveLocalNotification:仍然會被調用,或者只是啓動並等待直到應用程序啓動,然後您需要手動處理它與發射數據在application:didFinishLaunchingWithOptions:

我的方案是,我需要更新一些核心數據模型與附加到推送通知的數據,所以我希望這些更改反映無論他們如何啓動應用程序。

回答

1

根據我的經驗,除了通過它們直接啓動應用程序(在iOS 5上,在收到通知之後或通知中心出現的排隊通知之後),無法找到有關通知的信息。

另一種策略是使用圖標徽章。

如果您在收到通知時標記了您的應用程序圖標,則可以在每次啓動應用程序時檢查該號碼,然後執行所需的操作。

1

當一個通知彈出時,您可以查看它或取消。如果用戶已經取消通知,您可以檢查他們的下一個他們在應用程序中去時間:

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

這就給了你很好的覆蓋與本地通知所有場景具體做法是:

  • 收到通知,用戶取消。稍後檢查didFinishLaunchingWithOptions
  • 通知已確認,應用程序未打開。檢入didFinishLaunchingWithOptions
  • 通知被確認,該應用程序在後臺。 didReceiveLocalNotification:
  • 通知被呈現,而在該應用didReceiveLocalNotification:
相關問題