La notificación Voip Pushkit no volverá a iniciar la aplicación si se cerró por la fuerza y se reinició el dispositivo

No puedo recibir notificaciones voip pushkit para volver a iniciar la aplicación si el usuario la ha forzado a cerrar la aplicación (deslizándola hacia arriba en la interfaz multitarea) Y si el dispositivo se reinicia.

Sin embargo, puedo hacer que las notificaciones de VoIP Pushkit funcionen en los siguientes escenarios:

La aplicación se cerró por la fuerza y luego llegó la notificación del kit de envío. La aplicación se relanzará de inmediato. Las notificaciones push estándar no son capaces de activar la aplicación en tal escenario.

La aplicación estaba en segundo plano / suspendida y el dispositivo se reinicia. Gracias al modo Voip, la aplicación se reiniciará al reiniciar el dispositivo (puedo ver el proceso en Xcode Activity Monitor). El, re es un truco necesario aquí para que la notificación del kit de procesamiento se procese correctamente, que se describe enhttp://blog.biokoda.com/post/114315188985/ios-and-pushkit en estos términos "Antes de inicializar PushKit, inicie una tarea en segundo plano. Finalice esta tarea cuando se reciba el token PushKit"

De alguna manera, cuando se combinan estos dos (reinicio del dispositivo Y cierre forzado de la aplicación), las notificaciones pushkit no parecen relanzar la aplicación. Además, al mirar los registros del dispositivo en Xcode, no recibo registros de apsd que indiquen que el sistema procesó la notificación.

Aquí está mi 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 ...
}

También tengo "Voz sobre IP" y "Notificaciones remotas" habilitadas en los modos de fondo.

Sé que otras aplicaciones como Whatsapp pueden relanzarse en este escenario, por lo que no entiendo lo que estoy haciendo mal.

En una nota relacionada, no ayuda hacer lo siguiente 1) Forzar cierre 2) Enviar una notificación pushkit, que se recibirá 3) Reiniciar. La aplicación no se relanzará y una nueva notificación push aún no se volverá a lanzar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta