Szukaj…


Przechwytywanie połączeń z aplikacji nawet w tle

Z dokumentacji Apple:

Użyj klasy CTCallCenter, aby uzyskać listę bieżących połączeń komórkowych i reagować na zmiany stanu połączeń, na przykład ze stanu wybierania na stan połączenia. Takie zmiany stanu są znane jako zdarzenia wywołania komórkowego.

Celem CTCallCenter jest umożliwienie programistom wstrzymania stanu aplikacji podczas połączenia, aby zapewnić użytkownikowi jak najlepsze wrażenia.

Cel C:

Najpierw zdefiniujemy nowego członka klasy wewnątrz klasy, którą chcemy obsługiwać przechwytywania:

@property (atomic, strong) CTCallCenter *callCenter;

Wewnątrz naszej klasy init (konstruktor) przydzielimy nową pamięć dla naszego członka klasy:

[self setCallCenter:[CTCallCenter new]];

Następnie wywołamy naszą nową metodę, która faktycznie obsługuje przechwytywanie:

- (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");
     }
 }];
}

To wszystko, jeśli użytkownik będzie korzystał z Twojej aplikacji i odbierze połączenie telefoniczne, możesz przechwycić to połączenie i obsłużyć aplikację w celu zapisania.

Warto wspomnieć, że można przechwycić 4 stany połączeń:

CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected

Szybki:

Zdefiniuj członka klasy w odpowiedniej klasie i zdefiniuj go:

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

Co się stanie, jeśli Twoja aplikacja będzie działać w tle i będziesz musiał przechwytywać połączenia, gdy aplikacja będzie działać w tle?

Na przykład, jeśli tworzysz aplikację korporacyjną , możesz w zasadzie po prostu dodać 2 funkcje (VOIP i pobieranie w tle) na karcie Możliwości:

Twój cel projektu -> Możliwości -> Tryby tła -> zaznacz Voice over IP i pobieranie w tle

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow