5

I am trying to remove callkit screen once my voip call is disconnected by source or destination.

I used this code

CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:[NSUUID UUID]];
CXCallController *callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];
requestTransaction:[CXTransaction transactionWithActions:nil completion:completion]];

But it is not working to close the callkit. Can any one help me to solve this issue?

Megha Parmar
  • 248
  • 2
  • 15

2 Answers2

2

You can use this below method on call disconnected method.

@property (nonatomic, strong) CXCallController *callKitCallController;

- (void)performEndCallActionWithUUID:(NSUUID *)uuid {
    if (uuid == nil) {
        return;
    }

    CXEndCallAction *endCallAction = [[CXEndCallAction alloc] initWithCallUUID:uuid];
    CXTransaction *transaction = [[CXTransaction alloc] initWithAction:endCallAction];

    [self.callKitCallController requestTransaction:transaction completion:^(NSError *error) {
        if (error) {
            NSLog(@"EndCallAction transaction request failed: %@", [error localizedDescription]);
        }
        else {
            NSLog(@"EndCallAction transaction request successful");
        }
    }];
}
Asif Raza
  • 836
  • 12
  • 29
0

You have to pass your CXTransaction with CXEndCallAction into your requestTransaction.

First of all in initWithCallUUID you have to pass your current call NSUUID. Then you can call requestTransaction on your CXCallController and pass [CXTransaction transactionWithActions:@[endaction] into it, instead of nil as you did.

CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:[NSUUID UUID]]; // your current call UUID
CXCallController *callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];
[callController requestTransaction:[CXTransaction transactionWithActions:@[endaction]] completion:completion];