我正在将CallKit与VOIP应用集成。我能够拨打电话和拨打电话。我按照步骤:
我已经为DTMF提供者委托实现了回调,如下所示:
func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) {
print("Provider - CXPlayDTMFCallAction")
let dtmfDigts:String = action.digits
for (index, _) in dtmfDigts.characters.enumerated() {
let dtmfDigit = dtmfDigts.utf8CString[index]
print("Processing dtmfDigit:\(dtmfDigit)" )
self.softphone.dtmf(on:dtmfDigit)
}
self.softphone.dtmfOff()
// Signal to the system that the action has been successfully performed.
action.fulfill()
}
我没有听到按键声音,即当我在通话过程中按下本机通话中的号码时,本地dtmf会发出声音。
来自https://developer.apple.com/reference/callkit/cxplaydtmfcallaction:
“CallKit会自动播放相应的DTMF频率 通过呼叫传输的任何数字。该应用程序负责 管理数字的计时和处理,作为履行的一部分 动作“。
这是一个已知问题还是callkit不播放本地dtmf键按下声音?
答案 0 :(得分:3)
当按下原生呼叫UI的“键盘”按钮中的键时,CallKit应在本地播放DTMF音。但CallKit应用程序负责通过自己的网络接口将DTMF音调发送到远程端。
如果您没有听到本地通话中用户界面播放的音调,那么请report a bug向Apple发送。
答案 1 :(得分:1)
我能够通过以下方式使其发挥作用:
func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) {
print("Provider - CXPlayDTMFCallAction")
self.softphone.audioController.configureAudioSession()
let dtmfDigts:String = action.digits
for (index, _) in dtmfDigts.characters.enumerated() {
let dtmfDigit = dtmfDigts.utf8CString[index]
print("Processing dtmfDigit:\(dtmfDigit)" )
self.softphone.dtmf(on:dtmfDigit)
}
self.softphone.dtmfOff()
// Signal to the system that the action has been successfully performed.
action.fulfill()
}
注意:我添加了self.softphone.audioController.configureAudioSession()。
-(void) configureAudioSession
{
// Configure the audio session
AVAudioSession *sessionInstance = [AVAudioSession sharedInstance];
// we are going to play and record so we pick that category
NSError *error = nil;
[sessionInstance setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (error) {
NSLog(@"error setting audio category %@",error);
}
// set the mode to voice chat
[sessionInstance setMode:AVAudioSessionModeVoiceChat error:&error];
if (error) {
NSLog(@"error setting audio mode %@",error);
}
NSLog(@"setupAudioSession");
return;
}