문제

내 앱 대리인의

에 코드가 있습니다.
    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()
}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top