I need my app to send a notification when there is a call (incoming call, connected, call ended) I registered my viewController with notification.
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callReceived:) name:CTCallStateIncoming object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callEnded:) name:CTCallStateDisconnected object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callConnected:) name:CTCallStateConnected object:nil];
I also made a method to check call state
-(IBAction)checkForCall:(id)sender{
    NSLog(@"call state %@ id %@",call.callState,call.callID);
    CTCallCenter *callCenter = [[CTCallCenter alloc] init];
    callCenter.callEventHandler = ^(CTCall* call){
        if (call.callState == CTCallStateDisconnected)
        {
            NSLog(@"Call has been disconnected");
        }
        else if (call.callState == CTCallStateConnected)
        {
            NSLog(@"Call has just been connected");
        }
        else if(call.callState == CTCallStateIncoming)
        {
            NSLog(@"Call is incoming");
        }
        else
        {
            NSLog(@"None of the conditions");
        }
    };
}
But none of this works. Please help me.
Where is the mistake? Is there any code which tells how to use core telephony?
use this
Appdelegate.h
#import <CoreTelephony/CTCallCenter.h>
#import <CoreTelephony/CTCall.h>
...
@property (nonatomic, strong) CTCallCenter* callCenter;
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{  
   .... 
  self.callCenter = [[CTCallCenter alloc] init];
  [self handleCall];
   .... 
}
-(void)handleCall
{
    self.callCenter.callEventHandler = ^(CTCall *call){
       if ([call.callState isEqualToString: CTCallStateConnected])
       {
          //NSLog(@"call stopped");
       }
       else if ([call.callState isEqualToString: CTCallStateDialing])
       {
        }
       else if ([call.callState isEqualToString: CTCallStateDisconnected])
       {
          //NSLog(@"call played");
        }
       else if ([call.callState isEqualToString: CTCallStateIncoming])
       {
           //NSLog(@"call stopped");
       }
     };
  }
                        In Swift 3
Use CXCallObserver 
import CallKit
var callObserver = CXCallObserver()
class AppDelegate: UIResponder, UIApplicationDelegate, CXCallObserverDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
callObserver.setDelegate(self, queue: nil) //Set delegate to self to call delegate method. 
return true 
}
 func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
    if call.hasConnected {
        print("Call Connect -> \(call.uuid)")
    }
    if call.isOutgoing {
        print("Call outGoing \(call.uuid)")
    }
    if call.hasEnded {
        print("Call hasEnded \(call.uuid)")
    }
    if call.isOnHold {
        print("Call onHold \(call.uuid)")
      }
  }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With