我想在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;
答案 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通话显示在手机应用中,就像这些一样。 CallKit也可以拨打您的VoIP应用,就像向用户发送股票语音通话一样。
您正在寻找的内容需要私有框架,但在这种情况下,您要么为越狱版本编写代码,要么为您的客户编写私有版本。为此,您可能需要查看TelephonyUtilities.framework。看看here。 TUCall似乎是一个调用对象,通过它可以获取详细信息或结束它,而TUCallCenter有一个incomingCalls方法。所以这确实可行,只是在私人版本中,而不是App Store应用程序。