programing

사용자가 강제 종료한 경우 iOS에서 백그라운드로 앱을 실행합니까?

kakaobank 2023. 5. 7. 11:45
반응형

사용자가 강제 종료한 경우 iOS에서 백그라운드로 앱을 실행합니까?

다음을 사용하여 백그라운드 가져오기를 트리거하고 있습니다.content-available푸시 알림에 플래그가 표시됩니다.나는 가지고 있습니다.fetch그리고.remote-notification UIBackgroundModes가능한.

다음은 제가 앱 대표자에서 사용하고 있는 구현입니다.m:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
    NSLog(@"Remote Notification Recieved");
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody =  @"Looks like i got a notification - fetch thingy";
    [application presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}

앱이 백그라운드에서 실행되면 정상적으로 작동합니다. (알림이 수신되고 앱은 위의 코드가 수행해야 하는 것처럼 "알림을 받은 것처럼 보입니다" 로컬 알림을 트리거했습니다.)

그러나 앱이 실행되지 않고 Push 알림이 수신된 경우content-available플래그, 앱이 실행되지 않고 있습니다.didRecieveRemoteNotification대리 메서드가 호출되지 않습니다.

WWDC 비디오 멀티태스킹의 새로운 기능(WWDC 2013의 #204)은 다음을 보여줍니다.여기에 이미지 설명 입력

이 푸백시된다응면용 "드로실운행이고 "표그라니됩시다램"와 .content-available 깃발

내 앱이 백그라운드로 실행되지 않는 이유는 무엇입니까?

그래서 진짜 질문은 다음과 같습니다.

사용자가 앱을 강제 종료한 후 iOS가 백그라운드 작업을 수행합니까?

업데이트 2:

iOS 8에 도입된 새로운 PushKit 프레임워크를 사용하면 이를 달성할 수 있습니다.PushKit은 VoIP에 사용됩니다.따라서 당신의 사용은 VoIP와 관련된 것이어야 합니다. 그렇지 않으면 앱이 거부될 위험이 있습니다.( 답변을 참조하십시오.


UDPDATE1:

iOS8에 대한 설명서가 명확하게 설명되었습니다.설명서는 여기에서 읽을 수 있습니다.다음은 관련 발췌문입니다.

이 방법을 사용하여 앱에 대한 수신 원격 알림을 처리합니다.application:didReceiveRemoteNotification:메소드는 앱이 포그라운드에서 실행 중일 때만 호출되며, 앱이 포그라운드 또는 백그라운드에서 실행 중일 때 시스템이 이 메소드를 호출합니다.또한 원격 알림 백그라운드 모드를 사용하도록 설정한 경우 시스템은 푸시 알림이 도착하면 앱을 실행(또는 일시 중단 상태에서 해제)하고 백그라운드 상태로 전환합니다.그러나 사용자가 강제 종료한 경우에는 시스템이 자동으로 앱을 시작하지 않습니다. 이 경우 시스템이 자동으로 앱을 다시 시작하기 전에 사용자가 앱을 다시 시작하거나 장치를 다시 시작해야 합니다.


WWDC 비디오를 통해 명확하게 밝혀지지 않았지만 개발자 포럼에서 빠르게 검색한 결과 다음과 같이 나타났습니다.

https://devforums.apple.com/message/873265#873265 (추가 필요)

또한 앱 전환기에서 앱을 종료하는 경우(즉, 앱을 삭제하기 위해 스와이프업) 푸시 알림 또는 백그라운드 가져오기에 관계없이 OS가 앱을 다시 시작하지 않습니다.이 경우 사용자는 앱을 수동으로 한 번 다시 시작한 다음 이후로 백그라운드 작업이 실행됩니다. -pmarcos

그 게시물은 애플 직원이 올린 것이기 때문에 이 정보가 맞다고 믿을 수 있을 것 같습니다.

따라서 앱 전환기에서 앱이 삭제될 때(스와이프 업으로) 예정된 백그라운드 가져오기의 경우에도 앱이 실행되지 않을 것으로 보입니다.

Scheme"에서 설정을 "Manage Scheme"으로 할 수 .Wait for <app>.app to be launched manually을 설디있수다니습버할에 수 .application: didReceiveRemoteNotification: fetchCompletionHandler:푸시 알림을 전송하여 백그라운드 실행을 트리거합니다.

문제를 해결할 수 있을지는 모르겠지만 현재로서는 디버깅에 도움이 될 수 있습니다.

스크린샷

정답은 '예'이지만 '백그라운드 가져오기' 또는 '원격 알림'을 사용하면 안 됩니다.PushKit은 당신이 원하는 답입니다.

요약하자면, ios 8의 새로운 프레임워크인 PushKit은 앱 전환기에서 앱이 스와이프되어 삭제되어도 시각적 경고 프롬프트 없이 앱을 백그라운드로 조용히 실행할 수 있는 새로운 푸시 알림 메커니즘입니다. 놀랍게도 앱 전환기에서도 볼 수 없습니다.

Apple의 PushKit 참조:

PushKit 프레임워크는 iOS 앱이 원격 서버로부터 푸시를 받을 수 있도록 클래스를 제공합니다.푸시는 표준 및 VoIP의 두 가지 유형 중 하나일 수 있습니다.표준 푸시는 이전 버전의 iOS와 마찬가지로 알림을 전달할 수 있습니다.VoIP 푸시는 VoIP 앱이 사용자에게 알림을 표시하기 전에 푸시의 주문형 처리를 수행하는 데 필요한 표준 푸시 외에도 추가 기능을 제공합니다.

이 새 기능을 배포하려면 다음 자습서를 참조하십시오. https://zeropush.com/guide/guide-to-pushkit-and-voip - 장치에서 테스트해 본 결과 예상대로 작동합니다.

실제로 백그라운드 가져오기를 테스트해야 하는 경우 구성표에서 하나의 옵션을 활성화해야 합니다.

bg 가져오기 실행

테스트할 수 있는 또 다른 방법:bg 가져오기 시뮬레이션

다음은 이 새로운 기능에 대한 전체 정보입니다. http://www.objc.io/issue-5/multitasking.html

저는 며칠 동안 이것의 다양한 변형을 시도해 보았고, 사용자가 죽이라고 스와이프했을 때도 하루 동안 백그라운드에서 앱을 다시 실행하도록 했다고 생각했습니다. 하지만 저는 그 행동을 복제할 수 없습니다.

이전과 행동이 많이 달라진 것은 유감입니다.iOS 6에서, 당신이 흔들거리는 아이콘에서 앱을 죽였다고 해도, 그것은 여전히 SLC 트리거에서 다시 깨어날 것입니다.자, 스와이프로 죽이면, 그런 일은 일어나지 않습니다.

그것은 다른 행동이고, iOS 6에서 그것을 죽였다면 우리의 앱에서 계속해서 유용한 정보를 얻었을 사용자는 이제 그러지 않을 것입니다.

우리는 사용자들이 앱을 삭제하려고 스와이프를 했는데도 여전히 우리가 그들에게 주던 알림 동작 중 일부를 기대하고 있다면 지금 다시 열도록 설득해야 합니다.나는 사용자들이 앱을 스와이프할 때 이것이 명백하지 않을까 걱정됩니다.그들은 결국 기본적으로 정리하거나 최소화된 앱을 재정렬하기를 원할 수 있습니다.

이것은 당신에게 도움이 될 것입니다.

대부분의 경우 사용자가 앱을 강제 종료한 후에는 시스템이 앱을 다시 시작하지 않습니다.한 가지 예외는 위치 앱으로, iOS 8 이상에서는 사용자에 의해 강제 종료된 후 다시 실행됩니다.그러나 다른 경우에는 시스템이 앱을 백그라운드에서 자동으로 실행하기 전에 사용자가 앱을 명시적으로 실행하거나 장치를 재부팅해야 합니다.장치에서 암호 보호를 사용하도록 설정하면 사용자가 장치를 처음 잠금 해제하기 전에 시스템이 백그라운드에서 앱을 시작하지 않습니다.

출처: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

iOS13의 경우

iOS13에서 백그라운드 푸시의 경우 아래 파라미터를 설정해야 합니다.

apns-priority = 5
apns-push-type = background
//Required for WatchOS
//Highly recommended for Other platforms 

백그라운드 푸시 비디오 링크: https://developer.apple.com/videos/play/wwdc2019/707/

언급URL : https://stackoverflow.com/questions/19068762/will-ios-launch-my-app-into-the-background-if-it-was-force-quit-by-the-user

반응형