A notificação do Voip Pushkit não reinicia o aplicativo se for encerrada à força e o dispositivo tiver sido reiniciado

Não consigo receber notificações de voip pushkit para reiniciar o aplicativo se o usuário forçou o encerramento forçado (deslizando-o na interface multitarefa) E se o dispositivo foi reiniciado.

No entanto, eu posso fazer com que as notificações de voip pushkit funcionem nos seguintes cenários:

O aplicativo foi encerrado com força e a notificação do pushkit chega. O aplicativo será reiniciado imediatamente. As notificações por push padrão não são capazes de ativar o aplicativo nesse cenário.

O aplicativo estava em segundo plano / suspenso e o dispositivo foi reiniciado. Graças ao modo Voip, o aplicativo será reiniciado na reinicialização do dispositivo (posso ver o processo no Xcode Activity Monitor). O, re é um truque necessário aqui para que a notificação do pushkit seja processada corretamente, descrita emhttp://blog.biokoda.com/post/114315188985/ios-and-pushkit nestes termos "Antes de inicializar o PushKit, inicie uma tarefa em segundo plano. Conclua esta tarefa quando o token PushKit for recebido"

De alguma forma, ao combinar esses dois (reinicialização do dispositivo e encerramento forçado do aplicativo), as notificações por pushkit não parecem reiniciar o aplicativo. Além disso, ao olhar para os logs do dispositivo no Xcode, não recebo logs do apsd dizendo que a notificação foi processada pelo sistema.

Aqui está o meu código:

@implementation AppDelegate
{
  UIBackgroundTaskIdentifier bgTask;
}
- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    UIApplication* app = [UIApplication sharedApplication];
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];
    dispatch_async(dispatch_get_global_queue(
    DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        while (true) {
            ;
        }
    });
    // Initialize pushkit
    PKPushRegistry *pushRegistry =
        [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()];
    pushRegistry.delegate = self;
    pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];    
    return YES;
}

- (void)pushRegistry:(PKPushRegistry *)registry 
    didUpdatePushCredentials:(PKPushCredentials *)credentials
    forType:(NSString *)type{
    UIApplication* app = [UIApplication sharedApplication];
    [app endBackgroundTask:bgTask];
    // ... more code to read the token ...
}

- (void)pushRegistry:(PKPushRegistry *)registry
    didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
    forType:(NSString *)type {
    // ... logging to check if notification is received ...
}

Também tenho "Voz sobre IP" e "Notificações remotas" ativadas nos modos de segundo plano.

Sei que outros aplicativos como o WhatsApp podem ser reiniciados neste cenário, por isso não entendo o que estou fazendo de errado.

Em uma nota relacionada, não ajuda: 1) Forçar o encerramento 2) Enviar uma notificação de pushkit - que será recebida 3) Reinicializar. O aplicativo não será reiniciado e uma nova notificação por push ainda não o reiniciará.

questionAnswers(1)

yourAnswerToTheQuestion