iOS
CTCallCenter
Поиск…
Перехват вызовов из вашего приложения даже из фона
Из документации Apple:
Используйте класс CTCallCenter для получения списка текущих сотовых вызовов и для ответа на изменения состояния для вызовов, например, из состояния набора в подключенное состояние. Такие изменения состояния называются событиями сотового вызова.
Цель CTCallCenter - предоставить разработчику возможность приостановить его состояние приложения во время разговора, чтобы дать пользователю лучший опыт.
Objective-C:
Сначала мы определим новый член класса внутри класса, который мы хотим обработать перехватами:
@property (atomic, strong) CTCallCenter *callCenter;
Внутри нашего класса init (конструктор) мы выделяем новую память для нашего члена класса:
[self setCallCenter:[CTCallCenter new]];
Впоследствии мы будем ссылаться на наш новый метод, который фактически обрабатывает перехваты:
- (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");
}
}];
}
Вот именно, если пользователь будет использовать ваше приложение и получит телефонный звонок, вы можете перехватить этот вызов и обработать свое приложение для сохранения состояния.
Стоит отметить, что есть 4 состояния вызова, которые вы можете перехватить:
CTCallStateDialing
CTCallStateIncoming
CTCallStateConnected
CTCallStateDisconnected
Swift:
Определите своего члена класса в соответствующем классе и определите его:
self.callCenter = CTCallCenter()
self.callCenter.callEventHandler = { call in
// Handle your interception
if call.callState == CTCallStateConnected
{
}
}
Что произойдет, если ваше приложение находится в фоновом режиме, и вам нужно перехватить вызовы, пока приложение находится в фоновом режиме?
Например, если вы разрабатываете корпоративное приложение, вы можете просто добавить 2 возможности (VOIP & Background fetch) на вкладке «Возможности»:
Цель проекта -> Возможности -> Фоновые режимы -> отметка Передача голоса по IP и фоновой выборке
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
}
}