如何在VOIP通话断开后关闭Callkit屏幕

5

我正在尝试在源或目标断开voip通话后删除callkit屏幕。

我使用了以下代码:

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

但是关闭callkit不起作用。有谁能帮我解决这个问题吗?

2个回答

2
您可以在通话断开方法中使用以下方法。
@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");
        }
    }];
}

0

您需要将 CXTransactionCXEndCallAction 一起传递到您的 requestTransaction 中。

首先,在 initWithCallUUID 中,您需要传递当前通话的 NSUUID。然后,您可以在您的 CXCallController 上调用 requestTransaction 并将 [CXTransaction transactionWithActions:@[endaction] 传递给它,而不是像您之前所做的那样传递 nil

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];

你好,这个方法可行吗:provider.reportCall(with: callUUID, endedAt: Date(), reason: .remoteEnded)。 - famfamfam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接