2013-08-12 78 views
5

根據apple文檔,我們可以通過檢查應用程序狀態變量是否處於非活動狀態(link)來識別用戶點擊通知。檢測用戶點擊通知

的iOS注:在iOS中,您可以決定一個應用程序啓動 當用戶敲擊動作按鈕或的結果 通知是否被 傳遞到已經運行的應用程序檢查應用程序的狀態。在代理執行 的應用程序中:didReceiveRemoteNotification:或 application:didReceiveLocalNotification:方法,獲取 applicationState屬性的值並對其進行評估。如果值爲 UIApplicationStateInactive,用戶點擊操作按鈕;如果 值爲UIApplicationStateActive,那麼當 收到通知時,應用程序是最前面的。

但可以看到,那裏是一個系統警報(通過系統警報,我的意思是在其通過的iOS控制的應用的前景呈現的警報視圖)在前景中的使用情況和應用程序是在非活動狀態狀態(當一個「系統警報」在視圖中時,通過將應用程序的application state設置爲UIApplicationStateInactive),iOS後臺的應用程序處於非活動狀態,但用戶仍然能夠在屏幕上看到該應用程序的內容。請參閱附件下方:

enter image description here

在這種狀態下,如果應用程序收到通知時,它會表現出好像用戶點擊的通知。有沒有解決這個用例的解決方案?

+1

非常混亂。 「前臺系統警報和應用程序處於非活動狀態」的意思是什麼? –

+0

@HinataHyuga在屏幕截圖中,我有一個系統警報(gmail應用程序通知警報)的例子,它由iOS控制,而不是背後的應用程序。此時,iOS會將應用程序視爲處於非活動狀態(應用程序的應用程序狀態將設置爲非活動狀態)。每次應用程序:didReceiveLocalNotification:當你得到通知時調用方法調用 – Shashank

+0

。 – iPatel

回答

5
- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo 
{ 
     UIApplicationState state = [application applicationState]; 
     if (state == UIApplicationStateActive) 
     { 
       //When your app was active and it got push notification 
     } 
     else if (state == UIApplicationStateInactive) 
     { 
       //When your app was in background and it got push notification 
     } 
} 

didFinishLaunchingWithOptions將在您的應用程序未運行並且在您的通知中單擊啓動時調用。

由於您將在didReceiveRemoteNotification中顯示alertview,您可以識別在alertview的代理方法中點按,即- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

+0

這個我明白。即使用戶處於屏幕截圖所示的狀態,我也希望可以檢查用戶點擊通知。 – Shashank

+1

這是不正確的。此方法僅在應用程序運行時調用。「如果在推送通知到達時應用程序未運行,該方法將啓動應用程序,並在啓動選項字典中提供適當的信息。該應用程序不會調用此方法來處理該推送通知。」 – nerowolfe

+0

正如屏幕截圖所示 - 此警報通過代碼顯示,它不是關於通知的系統警報。 – nerowolfe

0

他們固定在ios10這個問題,當add方法:

userNotificationCenter willPresentNotification. 

這個當應用程序在forground /活躍狀態只會叫,只有用戶後,通知將出現駁回其他系統警報。

+0

我想你的意思是['可選的func userNotificationCenter(_ center:UNUserNotificationCenter, didReceive response:UNNotificationResponse, withCompletionHandler completionHandler:@escaping() - > Void)'](https://developer.apple.com/文檔/ usernotifications/unusernotificationcenterdelegate/1649501-usernotificationcenter)。 < - 這個方法實際上捕獲響應,即水龍頭。 'willPresentNotification'只有當應用程序處於**前臺**時......並且當您處於前臺時,您纔會顯示警報並自行處理。 – Honey