Voip Pushkit-Benachrichtigung startet die App nicht neu, wenn sie erzwungen wurde und das Gerät neu gestartet wurde

Ich kann keine Voip-Pushkit-Benachrichtigungen zum Neustart der App erhalten, wenn der Benutzer die App zwangsweise beendet hat (indem er sie in der Multitasking-Oberfläche nach oben wischt) UND das Gerät neu gestartet wurde.

Ich kann jedoch die Voip-Pushkit-Benachrichtigungen in den folgenden Szenarien verwenden:

Die App wurde zwangsweise beendet, als die Pushkit-Benachrichtigung eintrifft. Die App wird sofort neu gestartet. Standard-Push-Benachrichtigungen können die App in einem solchen Szenario nicht aktivieren.

Die App war im Hintergrund / wurde angehalten und das Gerät wird neu gestartet. Dank des Voip-Modus wird die App beim Neustart des Geräts neu gestartet (ich kann den Vorgang im Xcode Activity Monitor sehen). Dies ist ein Trick, der hier benötigt wird, um die Pushkit-Benachrichtigung ordnungsgemäß zu verarbeiten, wie in @ beschriebehttp: //blog.biokoda.com/post/114315188985/ios-and-pushki in diesen Begriffen "Bevor Sie PushKit initialisieren, starten Sie eine Hintergrundaufgabe. Beenden Sie diese Aufgabe, wenn das PushKit-Token empfangen wird"

Wenn diese beiden Optionen kombiniert werden (Neustart des Geräts UND Beenden der App erzwingen), werden Pushkit-Benachrichtigungen nicht angezeigt, um die App neu zu starten. Auch wenn ich mir die Geräteprotokolle in Xcode ansehe, erhalte ich von apsd keine Protokolle, die besagen, dass die Benachrichtigung vom System verarbeitet wurde.

Hier ist mein Code:

@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 ...
}

Auch ich habe "Voice over IP" und "Remote-Benachrichtigungen" im Hintergrundmodus aktiviert.

Ich weiß, dass andere Apps wie WhatsApp in diesem Szenario neu gestartet werden können, daher verstehe ich nicht, was ich falsch mache.

In einem verwandten Hinweis hilft Folgendes nicht: 1) Beenden erzwingen 2) Pushkit-Benachrichtigung senden - wird empfangen 3) Neustart. Die App wird nicht neu gestartet und eine neue Push-Benachrichtigung wird sie immer noch nicht neu starten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage