2012-09-05 37 views
8

我一直試圖在我的應用程序中處理接收通知,但它並沒有真正解決問題。iOS從未運行狀態啓動應用程序後處理通知

當我使用didReceiveLocalNotification:(UILocalNotification *)notification。我可以接收和使用用於輸入應用程序的通知,沒有任何問題

然而,當應用程序已經運行(有效,無效,背景暫停此功能僅觸發,並且可能,但我還沒有嘗試過)。

現在,有這個功能didFinishLaunchingWithOptions:(NSDictionary *)launchOptions你可以使用[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]這將返回一個UILocalNotification。

但是,當您從啓動應用程序未運行狀態時,此事件未被觸發。 LocalNotification然後打開應用程序,但我無法以任何方式使用它。

現在,我的問題是:如何使其工作,以便在應用程序處於非運行狀態時從通知啓動應用程序時可以接收和處理通知?有沒有可能是我在這裏做錯了?

這裏是我的應用程序有點示例代碼:

首先,didFinishLaunchingWithOptions功能,其中,不幸的是不起作用。該功能[sharedLocalNotificationsInstance processNotification:notification]從未推出...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 
[sharedLocalNotificationsInstance checkNotifications]; 

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
if (notification != nil) { 

    // Process the received notification 
    [sharedLocalNotificationsInstance processNotification:notification]; 

    application.applicationIconBadgeNumber = 0; 
} 

return YES; 
} 

和第二部件代碼:本didReceiveLocalNotification功能,它完美的作品:我收到通知,並[sharedLocalNotificationsInstance processNotification:通知]完美的作品。

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

// Used when the application launches from a notification 
LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 

// Process the received notification 
[sharedLocalNotificationsInstance processNotification:notification]; 
} 
+0

嗨拉爾斯克。我有同樣的確切問題。 我可以在應用程序處於前景或背景時捕獲通知,但有趣的事情發生在應用程序關閉時。 我點擊通知,應用程序打開,在屏幕上停留1秒,然後屏幕變黑。我在後臺看到應用程序,但沒有收到通知的跡象。我真的不確定是否 UILocalNotification * notification =(UILocalNotification *)[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 是否有效。 您是否找到了解決方案? – Add080bbA

回答

4

這是iOS處理本地通知的方式。這取決於您的應用程序的狀態,例如活躍,在後臺運行,還是尚未開始。 iOS將調用didFinishLaunchingWithOptions或didReceiveLocalNotification,或者根本不會觸摸您的應用程序。

請參見本文的澄清 - http://www.thekspace.com/home/component/content/article/62-uilocalnotification-demystified.html

+0

感謝您的鏈接!不幸的是,該頁面還表示,該應用程序將啓動didFinishLaunchingWithOptions時,應用程序將處於非運行狀態,它不幸,不... ...至少不會,據我所知。我現在想到的是,它可能會做些稍微不同的事情:啓動應用程序,然後觸發didReceiveLocalNotification事件。當applicationState = 1(active)時,我只編寫了該事件來執行某些操作,但也許我需要使用它。我會看看! – laarsk

+0

如果您的應用程序未運行,當發生本地通知並且用戶激活通知時,iOS將啓動您的應用程序並通過didFinishLaunchingWithOptions傳遞通知對象。但是,如果用戶未激活通知,則不會發生任何事情。 –

+0

在iOS7中,當應用程序處於非活動狀態時,我沒有看到任何來自iOS的通知。徽章已設置,但點擊進入圖標應用程序時,不會調用任何功能。 – Brave

1

<Matrix-Morpheus-Meme title="WHAT IF I TOLD YOU">

當一個應用程序從「未運行」狀態啓動,因爲拍了拍本地通知提醒用戶,該應用程序已被啓動iOS,而不是Xcode,因此它不是在調試器下運行。你不能在它內部斷點,NSLog()也不會向Xcode控制檯發送任何東西。用UIAlertController進行測試。

</Matrix-Morpheus-Meme>

相關問題