Since iOS SDK build 2.6.76, it is possible to connect to an existing websocket session on the server to accept an incoming call when push notification is received:

1. Set keepAlive option when conection is established for the first time

- (FPWCSApi2Session *)connectWithOptions:(FPWCSApi2SessionOptions *)options {
    options.urlServer = _connectUrl.text;
    options.keepAlive = true;
    options.sipRegisterRequired = _sipRegRequired.control.isOn;
    options.sipLogin = _sipLogin.input.text;
    options.sipAuthenticationName = _sipAuthName.input.text;
    options.sipPassword = _sipPassword.input.text;
    options.sipDomain = _sipDomain.input.text;
    options.sipOutboundProxy = _sipOutboundProxy.input.text;
    options.sipPort = [NSNumber numberWithInteger: [_sipPort.input.text integerValue]];
    options.appKey = @"defaultApp";
    ...
    session = [FPWCSApi2 createSession:options error:&error];
    ...
    [session connect];
    return session;
}

2. Keep a session token after successful connection

    [session on:kFPWCSSessionStatusEstablished callback:^(FPWCSApi2Session *rSession){
        _authToken.input.text = [rSession getAuthToken];
        [self changeConnectionStatus:[rSession getStatus]];
        [self onConnected:rSession];
        if (!_sipRegRequired.control.isOn) {
                [self changeViewState:_callButton enabled:YES];
        }
    }];

Then, the session can be disconnected on mobile device when application goes to background, but the session will be kept on server during 1 hour by default.

3. When push notification is received, connect to the existing session by token

- (FPWCSApi2Session *)connectWithToken {
    FPWCSApi2SessionOptions *options = [[FPWCSApi2SessionOptions alloc] init];
    options.authToken = _authToken.input.text;
    return [self connectWithOptions:options];
}

4. Receive incoming call event and create answer/hangup alert dialog

    [session onIncomingCallCallback:^(FPWCSApi2Call *rCall) {
        call = rCall;
        ...
        alert = [UIAlertController
                                     alertControllerWithTitle:[NSString stringWithFormat:@"Incoming call from '%@'", [rCall getCallee]]
                                     message:error.localizedDescription
                                     preferredStyle:UIAlertControllerStyleAlert];
        
        UIAlertAction* answerButton = [UIAlertAction
                                   actionWithTitle:@"Answer"
                                   style:UIAlertActionStyleDefault
                                   handler:^(UIAlertAction * action) {
                                       [call answer];
                                   }];
        
        [alert addAction:answerButton];
        UIAlertAction* hangupButton = [UIAlertAction
                                       actionWithTitle:@"Hangup"
                                       style:UIAlertActionStyleDefault
                                       handler:^(UIAlertAction * action) {
                                           [call hangup];
                                       }];
        
        [alert addAction:hangupButton];
        [self presentViewController:alert animated:YES completion:nil];
    }];

5. Accept the incoming call

        [call on:kFPWCSCallStatusEstablished callback:^(FPWCSApi2Call *call){
            [self changeCallStatus:call];
            [self toHangupState];
            [self changeViewState:_holdButton enabled:YES];
        }];