现在我正在尝试将 CallKit 集成到现有的 VoIP 应用程序中。
根据 API,通过 CallKit 报告的每个调用都有一个与之关联的句柄。我们应用程序的用户可以进行音频和视频通话,这些通话是在帐户之间建立的,并且没有任何关联的“电话号码”,因此我们将通话句柄类型设置为“通用”,并使用一些特殊的帐户标识符作为这些句柄的值。这些用户帐户对用户不友好,不应显示在 UI 中。
因此,人们自然希望在通话历史记录中显示真实的用户名。这就是我们遇到障碍的地方。
根据 WWDC 会议,社交配置文件将成为集成 CallKit 的 VoIP 应用程序之间的一种链接,所以我的问题是如何创建社交配置文件并将其与 Callkit API 链接?
在检查了几个 VoIP 应用程序后,我认为这不是使用这些信息创建新联系人的正确方法,因为我在联系人中找不到它们。
任何评论/建议/帮助将不胜感激!
提前致谢。
我正在研究callKit框架,我发现通过使用调用目录扩展,我们可以识别传入的电话号码.我的问题是如何在iOS应用程序中实现调用目录扩展来识别传入的调用详细信息.我在Objective C工作.
使用此方法将数字"+ 919876xxxxx"添加到呼叫目录扩展中:
- (BOOL)addIdentificationPhoneNumbersToContext:(CXCallDirectoryExtensionContext *)context {
// Numbers must be provided in numerically ascending order.
CXCallDirectoryPhoneNumber phoneNumbers[] = {+919876xxxxx};
NSArray<NSString *> *labels = @[ @"Telemarketer"];
NSUInteger count = (sizeof(phoneNumbers) / sizeof(CXCallDirectoryPhoneNumber));
for (NSUInteger i = 0; i < count; i += 1) {
CXCallDirectoryPhoneNumber phoneNumber = phoneNumbers[i];
NSString *label = labels[i];
[context addIdentificationEntryWithNextSequentialPhoneNumber:phoneNumber label:label];
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
而我在电话设置中的通话阻止和识别功能.当我从这个号码打电话时,它会显示[应用程序名称]来电显示:电话推销员.
我的问题是如何在我的应用程序中知道这个数字,以便在表格中显示这个数字.
提前致谢.
我已经浏览了iOS CallKit文档,下面是Apple在"拨打电话"部分提供的代码.当我尝试调用函数startOutGoingCall()时没有任何反应,即我没有看到任何传出的调用UI.
有人可以建议我如何触发本地传出呼叫UI.
func startOutGoingCall(){
let uuid = UUID()
let handle = CXHandle(type: .emailAddress, value: "jappleseed@apple.com")
let startCallAction = CXStartCallAction(call: uuid)
startCallAction.destination = handle
let transaction = CXTransaction(action: startCallAction)
callController.request(transaction) { error in
if let error = error {
print("Error requesting transaction: \(error)")
} else {
print("Requested transaction successfully")
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:从我的代码中添加了委托方法
func provider(_ provider: CXProvider, perform action: CXStartCallAction) {
logMessage(messageText: "provider:performStartCallAction:")
/*
* Configure the audio session, but do not start call audio here, since …Run Code Online (Sandbox Code Playgroud) 我正在使用新的CallKit框架来使用系统UI接收传入的VOIP呼叫。
是否可以在系统调用屏幕上添加自定义信息,例如照片或其他文字/新的UIView?
还是可以建立自己的呼叫屏幕并以相同方式显示?
谢谢
我试图弄清楚用户在本地iOS呼叫屏幕中点击视频按钮时会发生什么。我看了一些教程,看了一下代码,它似乎不是委托方法或任何东西。
CXStartCallAction有一个属性:var isVideo: Bool,但我似乎无法弄清楚它的用法。
我注意到(在Speakerbox示例项目中)它将显示从“ Speakerbox Video”更改为“ Speakerbox Audio”,但是我假设它还有其他用途。
更大的问题可能是“视频按钮有什么作用?” 好像只是打开打开,但不确定。
我有一个应该支持视频通话的 VoIP 应用程序。所以,我打开应用程序,锁定屏幕,然后接听来电。问题是我不知道如何在用户按下“facetime”(视频通话)按钮时获得通知。基本上用户被引导到应用程序,但没有发生任何事情,因为我确实知道要收听的委托或通知。
我查看了 Skipe 应用程序,当在通话屏幕上按下视频通话按钮时,它似乎会收到通知。因此,当在 Skipe 应用程序中按下“facetime”按钮时,用户会被引导到应用程序并开始视频流。
简而言之,有人可以指出我应该听哪种委托或通知,以便在用户按下呼叫套件中的视频按钮时收到通知?
我正在开发一个使用CallKit通知用户的应用程序.但是,我正在使用APN测试应用程序,但它无法正常工作.
流程应为:接收FCM - >使用Callkit创建呼叫 - >用户接受呼叫 - >执行某些操作.
流程类似于应用程序类似于什么,但我没有VOIP,我只需要确保CALLKIT激活每个时间都有一个FCM.
但是,目前,如果应用程序处于后台或非活动状态,则callkit将无法启动.
我正在考虑使用PushKit来实现它.但是,我没有使用PushKit的经验(并且不确定我的应用程序是否会被禁止,根据这篇文章:PushKit:我们可以在聊天应用程序中使用推送套件(VoiP推送)而无需使用VoiP
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// With swizzling disabled you must let Messaging know about the message, for Analytics
// …Run Code Online (Sandbox Code Playgroud) 我已经为我的应用程序实现了 CallKit,以使用 WebRTC 在我们的应用程序中触发/接收音频和视频呼叫。这是无缝工作没有任何问题。
正如我所见,有 3 种方法可以从 Call Kit 触发呼叫。
截至目前,我没有任何要求使用 Siri 发起呼叫,但我们需要在用户单击本机 iOS 最近通话屏幕中的任何单元格时发起呼叫,然后路由到我们的应用程序并触发外出呼叫.
而且当用户呼叫其他用户时,我们的应用程序包含的元数据很少,例如receiverID 等。使用所有这些元数据的 iOS 最近通话屏幕的通话列表。
我正在浏览 Apple 提供的 CallKit “Speakerbox” 示例应用程序。我发现他们正在使用自定义 URL 方案,就像我们用于 iOS 应用程序的 DeepLinking 一样。
所以我需要一些建议,这是否可以使用 URL 方案来实现,如果可以,我如何将元数据(自定义对象)存储在 CXHandle 对象中。
在我的Voip应用程序中,我使用callkit来接听来电。通过使用以下方法:
-(void)reportIncomingCall:(NSUUID*)UDID handle:(NSString*)handle{
Run Code Online (Sandbox Code Playgroud)
我可以在iPhone本机通话应用程序的通话记录中看到此来电的日志。
我想从iPhone本机呼叫应用程序拨出电话。我为WhatsApp、环聊等应用程序工作。但是,当我尝试从来电记录呼叫用户时无法唤醒我的应用程序。
- (NSUUID *)reportOutgoingCallContactIdentifier:(NSString *)identifier destination:(NSString *)name telNumber:(NSString *)telnum
Run Code Online (Sandbox Code Playgroud) 当用户结束从CallKit UI发出的呼叫时,应用程序将结束呼叫,并且实际的VOIP呼叫也将结束。但是,当我从自定义UI结束呼叫时,VOIP呼叫结束,但CallKit仍处于活动状态。如何从自定义UI结束CallKit会话?
当我在CallKit UI上按结束呼叫时,会发生以下情况:
func provider(_ provider: CXProvider, perform action: CXEndCallAction) {
XCPjsua.shared()?.endCall()
action.fulfill()
}
Run Code Online (Sandbox Code Playgroud)
当我从自定义UI结束通话时会发生这种情况(我应该在这里关闭CallKit吗?):
- (void)endcall {
[[XCPjsua sharedXCPjsua] endCall];
}
Run Code Online (Sandbox Code Playgroud)