2012-01-10 64 views
9

我已經在兩個不同的應用程序中實現了UILocalNotifications。一個使用定位服務,這意味着如果它被殺死,它(通常)會重新啓動(所以它不是一個大問題)。但是,在另一個應用程序中,我會根據時間安排UILocalNotification。在這種情況下,我遇到了一個主要問題。UILocalNotification - App未運行時如何處理?

如果我安排了一個通知,那麼應用程序會死亡,內存不足,手機關閉,然後再次打開,我無法在打開應用程序時「自動」查看較早的通知。

這裏是工作(應用程序在後臺運行)的工作流程:

  1. 啓動的應用程序;應用程序時間表通知;關閉應用程序應用程序現在正在後臺運行
  2. 接收本地通知;起初忽略它;從頂部拉下拉菜單(狀態欄);觸摸通知以啓動應用程序
  3. 結果:應用程序在通知中適當地顯示信息。

這裏是不工作(應用程序不再在後臺運行)的工作流程:

  1. 啓動的應用程序;應用程序時間表通知;關閉應用程序應用程序現在在後臺運行
  2. 手動殺死應用程序(模擬我的情況)
  3. 仍然收到本地通知;起初忽略它;從頂部拉下拉菜單(狀態欄);觸摸通知以啓動應用程序
  4. 結果:應用程序啓動,但未調用didReceiveLocalNotification方法。用戶認爲該應用程序不起作用。
    注意:我甚至不能手動強制信息,因爲如果他們收到多個通知,我不知道他們觸摸哪一個來知道要顯示哪一個。

有沒有辦法知道他們感動時,應用程序是在後臺運行(因此不運行didReceiveLocalNotification method)上的通知?

回答

15

在第二種情況下,用戶已退出(或終止)應用程序,因此當用戶觸摸通知時,您的應用程序將啓動。

這可以在下面提到的appDelegate的方法處理

didFinishLaunchingWithOptions被調用時,應用程序啓動,所以只是檢查,如果應用程序實際上是啓動是因爲用戶觸摸的通知(下面的代碼):

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

    if (notification) 
    { 
     NSLog(@"notification caused app to launch, alert body = %@", notification.alertBody); 
     // do what ever action you want to do 
     // you could just copy the code from "didReceiveLocalNotification" and paste it here 
    } 

    return YES; 
} 
+1

嗨,這將工作,只有當殺死應用程序後,用戶點擊通知,如果他直接點擊應用程序圖標,看看徽章,我們如何向他展示所需的VC。 – Ranjit 2013-11-25 07:27:50

+0

@ user1046037這對我不起作用。你知道這是爲什麼嗎?'''didReceiveLocalNotification'''方法可行(但是應用程序正在運行時)。我似乎無法得到這個工作。 http://stackoverflow.com/questions/36246104/uiapplicationlaunchoptionslocalnotificationkey-always-null-ios – Supertecnoboff 2016-03-28 09:52:07

2

@Ranjit,這會在用戶點擊應用程序圖標時起作用,因爲它是一種應用程序委託方法。每次應用程序完成啓動時都會調用。 (不能評論,因爲我缺乏聲譽......;))

+0

沒有williams它不會工作 – Ranjit 2013-12-20 06:17:06

+0

當圖標點擊啓動應用程序時,UIApplicationLaunchOptionsLocalNotificationKey是零。必須點擊通知本身。 – 2016-08-16 21:07:10

+0

有沒有人找到這個解決方案? – 2016-11-23 13:25:54