iOS
CTCallCenter
Recherche…
Intercepter les appels depuis votre application, même en arrière-plan
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
CallKit - ios 10
//Header File
<CallKit/CXCallObserver.h>
CXCallObserver *callObserver = [[CXCallObserver alloc] init];
// If queue is nil, then callbacks will be performed on main queue
[callObserver setDelegate:self queue:nil];
// Don't forget to store reference to callObserver, to prevent it from being released
self.callObserver = callObserver;
// get call status
- (void)callObserver:(CXCallObserver *)callObserver callChanged:(CXCall *)call {
if (call.hasConnected) {
// perform necessary actions
}
}