随着 iOS 10 和 WatchOS 3 的发布而来的消息还有CallKit。
我在我的设备(iPhone 6s、iOS 10 beta 5;带有 WatchOS 3 beta 5的 AppleWatch)中尝试了 Apple 提供的演示应用程序(并在 WWDC 中展示),名为“ SpeakerBox ”,但我有一个严重的怀疑:
CallKit 提供的功能是否仅在 iOS 上可用,或者由于它使用操作系统调用系统,我们也将免费获得 Apple Watch 呼叫处理?
我使用演示应用程序进行了测试,但在这种情况下,我只在电话上响起呼叫,这对我来说很奇怪,因为 CallKit 应该是一个简化与操作系统呼叫系统集成的框架。
有谁知道如何以及是否可以在 WatchOS 中进行标准呼叫处理(当然> 3)?
我希望在我的应用中获得电话状态.
经过一番搜索,我找到了CoreTelephony框架.但是在iOS 10中已经弃用了.那么还有其他可用选择吗?
我也找到了CallKit.iOS 10中的一个新框架.但是没有得到与我搜索时相同的呼叫状态.
我有一个iOS应用程序,我想检测设备上的任何传入电话号码.CallKit只给我选择将一些数字映射到标签,但问题是那里有大量的电话号码.关于CallDirectory Extension的生命周期,也没有提到任何内容.
任何人都可以帮助我解决我的问题,我们如何实现这一目标.
我正在将新的CallKit API与我的VOIP应用程序集成.
如示例应用程序中所示:https://developer.apple.com/library/content/samplecode/Speakerbox/Introduction/Intro.html
我正在配置音频会话:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
在我的CXAnswerCallAction中:
func provider(_ provider: CXProvider, perform action: CXAnswerCallAction) …Run Code Online (Sandbox Code Playgroud) 我正在VoIP应用程序中实现CallKit支持。
通过设置supportsVideo为false,我可以禁用视频按钮CXProviderConfiguration。现在出现FaceTime按钮。
我想知道是否有一种方法可以在默认UI中禁用FaceTime按钮,因为该应用程序正在处理与FaceTime无关的内部企业编号。
更新:如下面的答案所述,可以禁用该按钮,但是呼叫方号码丢失(显示为Unknown)。我想保留数字并禁用FaceTime按钮。
更新:在iPhone设置中禁用FaceTime会禁用FaceTime按钮。但是,这不是解决此问题的有效方法。
更新:对CXHandle类型的任何更改,包括在其中插入对电话号码无效的字符,都不会影响该问题-仍然显示FaceTime按钮。
我们在iOS 10 VoIP应用程序中使用CallKit.我们注意到,在CallKit管理的呼叫中,点击incall Video按钮会发送StartCallIntent,因此开始新的视频通话.我们需要的是将视频添加到现有呼叫中.所以我们真的需要一个回调方法,就像静音,保持和组按钮调用各种方法一样.但是对于incall Video按钮没有回调.
任何人都知道如何解决这个问题.
谢谢
一旦我的 VoIP 呼叫按源或目的地断开连接,我将尝试删除 Callkit 屏幕。
我用了这个代码
CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:[NSUUID UUID]];
CXCallController *callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];
requestTransaction:[CXTransaction transactionWithActions:nil completion:completion]];
Run Code Online (Sandbox Code Playgroud)
但关闭 callkit 不起作用。任何人都可以帮我解决这个问题吗?
我们的项目使用WebRTC进行VOIP呼叫,并且在访问CallKit框架之前运行良好。但是当我尝试访问CallKit框架时,有一种情况,双方都听不到对方的讲话。当我删除CallKit时,一切恢复正常。
CallKit的应答按钮与项目中的原始应答按钮具有相同的功能。
而令我惊讶的是,没有必要听不到声音。有时一切正常,但有时会出现问题。好吧,出现问题的可能性更大。
我发现以下流程图,我怀疑问题出在函数调用的顺序上。但是我不知道WebRTC如何与图中的功能相对应。

另外,我很好奇套接字不稳定是否会导致CallKit框架异常工作
请原谅我英语不好,但是这个问题困扰了我好几天,我不知道到底是哪里出了问题,是不是和CallKit框架在哪里冲突?
希望你能帮助我,非常感谢!
我有一个带有CallKit通话拦截分机的应用程序。通常,它可以正常工作,但是在某些设备上,偶尔会被其自身禁用(嗯,实际上我想是由iOS禁用),因此用户必须转到“设置”,然后再次手动将其重新启用。但是,这种行为没有任何明显的原因:被阻止的电话号码数据量足够小(该应用程序大多数时候甚至可以使用较大的数据集,因此这不应该是内存问题),将号码排序顺序正确(升序),没有重复的数字等。重现该问题也很困难。感觉像是来自“外部世界”的东西干扰了扩展程序(另一个带有扩展程序的应用程序?),但是没有证据。
这种自动禁用的原因可能是什么?如何避免这种情况?
任何帮助,将不胜感激。
谢谢!
我在使用 Callkit 和 WebRTC 进行 VOIP 呼叫时遇到音频问题,同时从锁定屏幕接听电话。
一般功能:
我的应用程序在启动时会激活 audioSession。对于来电,生成并交换 SDP 提供和应答。对等连接已设置。无论是音频通话还是视频通话,都会生成音频和视频流。然后使用如下代码将Call上报给callkit:
callProvider.reportNewIncomingCall(with: currentCallUUID!, update: update) { error in }
Run Code Online (Sandbox Code Playgroud)
如果应用程序在前台,它工作正常。
但是,当手机被锁定,并且用户从锁定屏幕接听电话时,流会被交换,但两端都没有音频,直到用户自己进入应用程序。
当用户进入应用程序时,两端的音频都处于活动状态。
所有后台设置和功能都设置正确。
我还提到了 Apple 员工提供的以下解决方法。但即使它不起作用。
https://forums.developer.apple.com/thread/64544
正如我提到的,我使用 WebRTC 进行呼叫。如果我在用户接听电话后交换媒体流(仍在锁定屏幕上)并且当时设置了对等连接。它工作正常(但它增加了建立呼叫连接的延迟)。
但是如果在显示呼叫之前建立对等连接(比如在向 callkit 报告呼叫之前),音频将停止工作。
callkit ×10
ios ×10
swift ×3
voip ×3
audio ×2
ios10 ×2
objective-c ×2
pjsip ×2
webrtc ×2
apple-watch ×1
callblocking ×1
pushkit ×1
watchkit ×1