iOS - 로컬 알림이 전경에 들어갈 수 있는지 알 수 있는지 어떻게 알 수 있습니까?
-
21-12-2019 - |
문제
내 앱 대리인의
에 코드가 있습니다. application:didReceiveLocalNotification:
.
내 앱이 전경에있을 때마다 해당 로컬 알림에 대해 uialertView 을 표시하는 방법.
로컬 알림이 도착하면 사용자가 알림에 표시되며 앱을 선택하여 앱을 시작할 수 있습니다. 이 경우 내 앱이 포 그라운드에서 내 앱 대리인
에 온다. applicationWillEnterForeground:
.
가 호출됩니다. 그런 다음 내 DidreceivelOcalNotification 방법이 다시 호출되어 uialertview 가 다시 나타납니다. 그러나 실제로 사용자는 이미 백그라운드에서 앱이 있었지만 이상적 으로이 경고를 다시 표시하지 않으려 고합니다.
로컬 알림으로 인해 앱이 시작된 경우
application:didFinishLaunchingWithOptions:
.
방법 키
키에 대한 실행 옵션을 검사 할 수 있습니다. UIApplicationLaunchOptionsLocalNotificationKey
.
로컬 알림이 앱을 시작했는지 여부를 알고 있지만 로컬 알림과 상호 작용하는 사용자가 사용자가 전경으로 다시 가져올 때이 방법을 찾을 수있는 방법이없는 것 같습니다. 내 acceptwillenterforeground 방법이 최근 에이 문제를 해결하는 것처럼 보일 것입니다. " "
를 확인하십시오 [UIApplication sharedApplication].applicationState
.
내에서
application:didReceiveLocalNotification:
.
방법. 잘하면이 경우이 경우에 에 여전히 으로 설정되지 않을 정도로 일찍 받아 들일 수 있습니다.
해결책
AppDelegate에서 응용 프로그램이 알림을 받으면 응용 프로그램 상태를 확인할 수 있습니다
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIApplicationState state = [application applicationState];
// check state here
if(state ==UIApplicationStateBackground ){
}
}
. 다른 팁
방금 알림 센터가 열려 있고 앱 맨 위에있는 동안 아무 일도 일어나는 것을 막을 수있는 나쁜 부작용이 약간 있음을 알아 차리고 있다고 주장했습니다. 개인적으로 나는 이것이 내 경고보기가 생성되지 않도록이 문제를 멈추지 않으므로 대안을 생각해 냈습니다.
기본적으로 내 앱이 마지막으로 시작되었거나 전경이 발생했을 때의 날짜를 기록한 다음 알림 날짜를 테스트 할 때마다 소성품을 ApplastStarted 날짜와 비교하고 내 앱이 전경에 있었던 이후로 발생하면 알림 만 표시합니다. 이것은 알림에서 앱을 열 때 문제를 해결할 수 있지만 앱이 활성화되지 않은 시점 (즉, 알림 센터 뒤에 있음)을 표시 할 수 있습니다.
나는 아직이 접근 방식으로 어떤 문제도해도, 틀림없이 오늘부터 그것을 시도 해 왔기 때문에 많은 테스트가 없었습니다.
다른 사람이 비슷한 요구 사항이 없으면 기록 할 것 같아
스위프트 4 솔루션 :
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)
{
if UIApplication.shared.applicationState == .background {
//enter code here
}
completionHandler()
}
.