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


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow