CallKit Framework是否可以制作,接听和结束电话呼叫,或仅用于VOIP呼叫?

时间:2017-06-28 06:43:11

标签: ios iphone voip core-telephony callkit

我想在CallKit的帮助下对电话呼叫执行操作,但根据Apple文档,它只能用于拨打VOIP电话,有什么办法可以拨打电话,结束当前通话并在CallKit的帮助下接听来电。

我正在使用私有框架(TelephonyUtilities),试图进行上述活动。

NSBundle *bundlePath = [NSBundle bundleWithPath:@"/System/Library/PrivateFrameworks/TelephonyUtilities.framework"];
 if ([bundlePath load]) {   
    Class TUCallCenter = NSClassFromString(@"TUCallCenter");
    id tuCallCenter = [TUCallCenter sharedInstance];
}

但TUCallCenter方法都没有允许我从我的应用程序发起电话呼叫。虽然有定义的方法可用。 其中一些是:

- (id)_dial:(id)arg1 callID:(int)arg2 service:(int)arg3 sourceIdentifier:(id)arg4 dialType:(int)arg5 uniqueProxyIdentifier:(id)arg6;
- (id)_dialWithRequest:(id)arg1 completion:(id /* block */)arg2;
- (id)callWithCallUUID:(id)arg1;
- (id)callWithStatus:(int)arg1;
- (id)callWithUniqueProxyIdentifier:(id)arg1;
- (id)callsWithStatus:(int)arg1;
- (id)dial:(id)arg1 callID:(int)arg2 service:(int)arg3;
- (id)dial:(id)arg1 callID:(int)arg2 service:(int)arg3 sourceIdentifier:(id)arg4 uniqueProxyIdentifier:(id)arg5;
- (id)dial:(id)arg1 service:(int)arg2;
- (id)dialEmergency:(id)arg1;
- (id)dialEmergency:(id)arg1 sourceIdentifier:(id)arg2;
- (id)dialWithRequest:(id)arg1;
- (void)dialWithRequest:(id)arg1 completion:(id /* block */)arg2;

2 个答案:

答案 0 :(得分:3)

<强> CallKit

显示应用的VoIP服务的系统调用用户界面,并与其他应用和系统协调您的呼叫服务。

<强>概述

CallKit可让您将呼叫服务与系统上的其他与呼叫相关的应用程序集成。 CallKit提供呼叫接口,您可以处理与VoIP服务的后端通信。对于传入和传出呼叫,CallKit显示与电话应用程序相同的界面,为您的应用程序提供更原生的外观。并且CallKit适当地响应系统级行为,例如请勿打扰。

除了处理电话,您还可以提供呼叫目录应用扩展程序,以提供来电者ID信息以及与您的服务相关联的被屏蔽号码列表。

接听来电

直接接收来电方法会导致在VOIP应用中使用PushKit静音通知。

// MARK: PKPushRegistryDelegate
func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType) {
    // report new incoming call
}

因此,除了VOIP应用程序之外,没有机会使用CallKit。

https://developer.apple.com/documentation/callkit

希望这有助于理解场景。

答案 1 :(得分:2)

不是没有越狱(编辑:或者没有使用私人框架,对于私人发布的应用程序)我很害怕。

CallKit旨在让您的VoIP通话显示在手机应用中,就像这些一样。 An example of CallKit CallKit也可以拨打您的VoIP应用,就像向用户发送股票语音通话一样。

您正在寻找的内容需要私有框架,但在这种情况下,您要么为越狱版本编写代码,要么为您的客户编写私有版本。为此,您可能需要查看TelephonyUtilities.framework。看看here。 TUCall似乎是一个调用对象,通过它可以获取详细信息或结束它,而TUCallCenter有一个incomingCalls方法。所以这确实可行,只是在私人版本中,而不是App Store应用程序。