我刚刚将CallKit应用到我们的VOIP应用程序中,但我正在努力让出局呼叫UI显示出来.
在我的实验中,我刚刚创建了一个应该显示来电UI的简单方法,见下文:
CXProviderConfiguration * configuration = [[CXProviderConfiguration alloc] initWithLocalizedName:@"Bitcall"];
CXProvider *callkitProvider = [[CXProvider alloc] initWithConfiguration: configuration];
[callkitProvider setDelegate:self queue:nil];
CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.localizedCallerName = @"Ravadam Patel";
[callkitProvider reportNewIncomingCallWithUUID:[NSUUID UUID] update:update completion:^(NSError * _Nullable error) {
if (error) {
NSLog(@"Error: %@", error);
}
}];
Run Code Online (Sandbox Code Playgroud)
一切似乎工作正常,我实际上得到了call received这个代码的打印输出:
- (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 ended"); …Run Code Online (Sandbox Code Playgroud) 我制作了 VOIP 应用程序。为此,我将 PushKit 和 Callkit 与 pjsip 一起使用。
当后台应用程序收到呼叫通知时,我打开 callkit 屏幕,然后单击接受呼叫后使用 pjsip 连接。
1)调用结束问题
但是当调用hangout pjsip 成功调用hangout 但然后callkit 给我以下错误:
错误域=com.apple.callkit.error.request事务代码=4
为此,我检查了答案和结束呼叫 uuid 也相同,但又没有结束呼叫。我花了很多时间,但没有得到任何解决方案。
任何人有解决方案,请帮助我。
2) 接听电话后出现音频问题
接受呼叫音频后未配置。音频会话给我以下错误:
音频会话错误:错误域 = NSOSStatusErrorDomain 代码 = 561017449“(空)” [aurioc] 892:失败:'!pri'(启用 3,outf < 1 ch,44100 Hz,Int16> inf < 1 ch,44100 Hz,Int16 >)
对于上述错误,任何人都有解决方案,然后给我。
谢谢。
我正在使用 Twilio 语音快速入门代码https://github.com/twilio/voice-quickstart-swift。\n当我进行客户端到客户端呼叫时,呼叫无法连接。虽然 CallKit 在后台运行,但当我在后台发送应用程序时,我可以看到绿色通知栏。\n以下是错误:\nStartCallAction 事务请求失败:操作无法\xe2\x80\x99t 完成。(com.apple.CallKit.error.requesttransaction 错误 7。)
\n\n正如您所看到的,谷歌搜索没有帮助,因为似乎没有任何解决方案?
\n\n有谁知道如何进一步修复或调试它?
\n\n\n我已经实现CallKit,并CallDirectoryExtension在我的应用程序。有没有办法让应用内的用户启用此设置?类似于如何请求联系人、麦克风、相机的权限?
如果没有,将用户导航到此设置屏幕的最佳方式是什么?
Settings -> Phone -> Call Blocking and Identification
Run Code Online (Sandbox Code Playgroud)
当我在 CXStratCallAction 中请求 CXTansaction 时,它将错误消息显示为 "Error Domain=com.apple.CallKit.error.requesttransaction Code=1 "(null)" ". 任何人都可以解释此错误消息。
我正在使用 VOIP 应用程序。该应用程序与 CallKit 一起运行良好。
如果警报在通话中触发,我将面临问题。每次当警报停止触发(音频中断结束)时,我们都会尝试在 AVAudioSession 上 setActive: 。但它总是给出代码 1701737535 的错误,即。“ent?”。
当我尝试初始化音频单元时,会发生同样的错误。不使用 CallKit 它工作正常。
任何人都遇到过在音频中断结束时激活音频会话的问题。
我在同一场景中收到不同的错误“!pri”561017449,但这次由于本机电话应用程序而发生中断。
问题是 100% 可复制的。尝试了许多点击和跟踪,例如线程、延迟或调用 setActive:YES 而不调用 setActive:YES。但没有运气。
总结在这里:
收到错误 1701737535 即。“恩特?” 如果由于警报而中断。
收到错误 561017449 即。'!pri' 如果由于本机调用而中断
仅当将 CallKit 与 VIOP 结合使用时才进行复制。
任何人都帮忙。
我正在使用以下代码来接听视频通话。我的应用程序具有音频和视频通话功能,我使用的是 linphone + CallKit。
- (void)config {
CXProviderConfiguration *config = [[CXProviderConfiguration alloc]
initWithLocalizedName:[NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleName"]];
config.ringtoneSound = @"notes_of_the_optimistic.caf";
config.supportsVideo = TRUE;
config.iconTemplateImageData = UIImagePNGRepresentation([UIImage imageNamed:@"callkit_logo"]);
NSArray *ar = @[ [NSNumber numberWithInt:(int)CXHandleTypeGeneric] ];
NSSet *handleTypes = [[NSSet alloc] initWithArray:ar];
[config setSupportedHandleTypes:handleTypes];
[config setMaximumCallGroups:2];
[config setMaximumCallsPerCallGroup:1];
self.provider = [[CXProvider alloc] initWithConfiguration:config];
[self.provider setDelegate:self queue:dispatch_get_main_queue()];
}
- (void)reportIncomingCall:(LinphoneCall *) call withUUID:(NSUUID *)uuid handle:(NSString *)handle video:(BOOL)video
{
CXCallUpdate *update = [[CXCallUpdate alloc] init];
update.remoteHandle = [[CXHandle alloc] initWithType:CXHandleTypeGeneric value:handle];
update.supportsDTMF = TRUE;
update.supportsHolding = TRUE; …Run Code Online (Sandbox Code Playgroud) 我正在寻找解决方案,但尚未找到任何解决方案。我的应用程序仅接收 VoIP 推送,在 iOS 13 之后,当应用程序处于后台模式时,我无法再接收推送。我查看了其他问题,但无法通过提出的解决方案解决我的问题。有人可以帮助我吗?
在 iOS 13.0 及更高版本上,必须在收到传入 IP 语音呼叫时以及在 didReceiceIncomingPush() 方法完成执行之前使用 CallKit 框架进行报告,否则系统将终止您的应用程序。
多次未能报告来电可能会导致您的应用无法接收更多来电通知。
基本上,您不能再使用 VoIP 推送来发送非 VoIP 消息,并且需要对这些消息使用常规推送通知。
我读了这个公告,但在我的应用程序中,对于特定类型的推送 VoIP,我无法使用函数reportNewIncomingCall(),因为它需要如下参数:uuid、handle、hasVideo ecc。并且这些参数不存在于有效负载中。
我已经实现了 Web RTC 并且它运行良好。问题是,当应用程序未打开\xe2\x80\x94或终止状态\xe2\x80\x94时,当我接到电话时,我无法将我的声音传递给其他用户,而我可以收听。我在 CXAnswer 调用委托之前配置了 AVAudioSession。
\n\nfunc configureAudioSession() {\n let sharedSession = AVAudioSession.sharedInstance()\n do {\n try sharedSession.setCategory(AVAudioSession.Category.playAndRecord)\n try sharedSession.setMode(AVAudioSession.Mode.voiceChat)\n try sharedSession.setPreferredIOBufferDuration(TimeInterval(0.005))\n try sharedSession.setPreferredSampleRate(44100.0)\n } catch {\n debugPrint("Failed to configure `AVAudioSession`")\n}\nRun Code Online (Sandbox Code Playgroud)\n\nfunc provider(_ provider: CXProvider, perform action: CXAnswerCallAction) {\n\n guard let call = ProviderDelegate.callManager.callWithUUID(action.callUUID) else {\n action.fail()\n return\n }\n\n configureAudioSession()\n\n call.answer { error in\n if let error = error {\n print("ERROR: failed to answer: \\(error.localizedDescription)")\n }\n action.fulfill()\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n