iOS
CTCallCenter
Ricerca…
Intercettazione delle chiamate dalla tua app anche dallo sfondo
Dalla documentazione di Apple:
Utilizzare la classe CTCallCenter per ottenere un elenco di chiamate cellulari correnti e per rispondere alle modifiche di stato per le chiamate, ad esempio da uno stato di composizione a uno stato connesso. Tali cambiamenti di stato sono noti come eventi di chiamata cellulare.
Lo scopo di CTCallCenter è di dare allo sviluppatore la possibilità di mettere in pausa il suo stato di app durante una chiamata per dare all'utente la migliore esperienza.
Objective-C:
In primo luogo, definiremo un nuovo membro della classe all'interno della classe che intendiamo gestire le intercettazioni:
@property (atomic, strong) CTCallCenter *callCenter;
All'interno della nostra classe init (costruttore) assegneremo nuova memoria per il nostro membro della classe:
[self setCallCenter:[CTCallCenter new]];
Successivamente, invocheremo il nostro nuovo metodo che gestisce effettivamente le intercettazioni:
- (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");
}
}];
}
È così, se l'utente userà la tua app e riceverà una telefonata, potresti intercettare questa chiamata e gestire l'app per uno stato di salvataggio.
Vale la pena ricordare che ci sono 4 stati di chiamata che puoi intercettare:
CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected
Swift:
Definisci il tuo membro della classe nella classe rilevante e definiscilo:
self.callCenter = CTCallCenter()
self.callCenter.callEventHandler = { call in
// Handle your interception
if call.callState == CTCallStateConnected
{
}
}
Che cosa succederà se la tua app è in background e devi intercettare le chiamate mentre l'app è in background?
Ad esempio, se sviluppi un'app aziendale , puoi semplicemente aggiungere 2 funzionalità (VOIP e recupero in background) nella scheda Funzionalità:
Il tuo obiettivo di progetto -> Funzionalità -> Modalità di sfondo -> contrassegna Voice over IP e recupero in background
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
}
}