2013-11-26 50 views
2

我在檢測來自APNS的推送通知時遇到問題。iOS;當應用程序未運行或處於後臺時,推送通知不起作用

如果有來自APNS推送通知時,應用程序並不運行在後臺,

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 

是不行的。

而當我回到前臺而沒有從通知中心選擇推送通知消息時,這是行不通的。

我該如何解決這個問題?

我在iOS 6.13和iOS 7.0.4中測試應用程序。

感謝您的幫助。 :)

+0

顯示您的代碼。 –

+1

看來,您還沒有完全閱讀文檔護理。 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW4 – CRDave

+0

閱讀申請:didFinishLaunchingWithOptions: – CRDave

回答

1

從蘋果文檔:

如果您的應用支持遠程通知後臺模式實現此方法。

這意味着你使用的後臺任務重點的方法。並且僅在iOS 7.0之後提供。

我建議你使用application:didReceiveRemoteNotification:

從蘋果文檔:

如果應用程序正在運行並且接收到遠程通知時,應用程序調用該方法來處理該通知。

+0

當App沒有運行時,你會得到這個工作嗎? ?我的意思是當應用程序處於非運行狀態時如何處理推送通知?如果如果您收到很多通知並且您沒有打開該應用程序,那麼您也不會點擊系統的通知面板。你如何保留這些推動以便以後檢索。 –

+0

@BalramTiwari,如果應用程序的通知在應用程序未運行時到達,則設備會通知用戶應用程序有數據正在等待它。如果用戶沒有點擊通知面板,則什麼也沒有 – Vincent

2

實際上,通知的第一個接收者是系統,而不是您的應用程序。

如果您的應用程序是不是在前臺,應用程序的application:didReceiveRemoteNotification:fetchCompletionHandler將永遠不會被調用,直到您輕按通知,讓您的應用變得前景一次。

當推送通知到達並且用戶點擊「cancel」,your app has no way to read that push notification again。您必須實現單獨的功能(最有可能在server-side上)以獲取發送到此設備的通知列表。

+0

如果系統在後臺沒有提醒我關於我的應用程序的通知,該怎麼辦?雖然'application:didReceiveRemoteNotification:fetchCompletionHandler'在前臺被調用。 – Solomiya

相關問題