iOS Intercepter les appels depuis votre application, même en arrière-plan


Exemple

De la documentation Apple:

Utilisez la classe CTCallCenter pour obtenir une liste des appels cellulaires en cours et pour répondre aux modifications d'état des appels, par exemple d'un état de numérotation à un état connecté. Ces changements d'état sont appelés événements d'appel cellulaire.

CTCallCenter a pour but de permettre au développeur de mettre en pause l'état de son application lors d'un appel afin de donner à l'utilisateur la meilleure expérience possible.

Objectif c:

Tout d'abord, nous définirons un nouveau membre de classe dans la classe que nous voulons gérer les interceptions:

@property (atomic, strong) CTCallCenter *callCenter;

Dans notre classe init (constructeur), nous allouerons une nouvelle mémoire pour notre membre de la classe:

[self setCallCenter:[CTCallCenter new]];

Ensuite, nous invoquerons notre nouvelle méthode qui gère réellement les interceptions:

- (void)registerPhoneCallListener
{
[[self callCenter] setCallEventHandler:^(CTCall * _Nonnull call) {
    NSLog(@"CallEventHandler called - interception in progress");

     if ([call.callState isEqualToString: CTCallStateConnected])
     {
         NSLog(@"Connected");
     }
     else if ([call.callState isEqualToString: CTCallStateDialing])
     {
         NSLog(@"Dialing");
     }
     else if ([call.callState isEqualToString: CTCallStateDisconnected])
     {
         NSLog(@"Disconnected");

     } else if ([call.callState isEqualToString: CTCallStateIncoming])
     {
         NSLog(@"Incomming");
     }
 }];
}

Ça y est, si l'utilisateur utilisera votre application et recevra un appel téléphonique, vous pourrez intercepter cet appel et gérer votre application pour un état de sauvegarde.

Il est à noter qu’il existe 4 états d’appel que vous pouvez intercepter:

CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected

Rapide:

Définissez votre classe dans la classe concernée et définissez-la:

    self.callCenter = CTCallCenter()
    self.callCenter.callEventHandler = { call in
        //  Handle your interception
        if call.callState == CTCallStateConnected
        {
        }
    }

Que se passera-t-il si votre application est en arrière-plan et que vous devez intercepter les appels lorsque l'application est en arrière-plan?

Par exemple, si vous développez une application d' entreprise, vous pouvez simplement ajouter 2 fonctionnalités (VOIP et fond de page) dans l'onglet Fonctionnalités:

Votre cible de projet -> Capacités -> Modes d'arrière-plan -> Marquer le transfert de voix sur IP et d'arrière-plan