2017-06-28 112 views
1

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

我正在使用私有框架(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

不能没有越狱(编辑:使用或不使用私人框架,为一家私人发布的应用程序)我害怕。

CallKit旨在让您的VoIP电话显示在电话应用程序上,就像这些在这里。 An example of CallKit CallKit还可以使您的VoIP应用程序的呼叫显示为与股票语音呼叫一样。

你在找什么,需要一个私有框架来代替,但在这种情况下,你要么是为越狱版本编写代码,要么是为你的客户端发布私有版本。为此,您需要查看TelephonyUtilities.framework。检查出来here。 TUCall似乎是一个呼叫对象,通过它可以获取详细信息或结束它,而TUCallCenter有一个incomingCalls方法。所以这确实可以工作,只是在一个私人版本,而不是一个App Store应用程序。

+0

感谢您的回复,它的企业应用程序,所以我可以使用私有框架,但不是越狱设备,我会尝试使用TelephonyUtilities.framework –

+0

@JasmeetSingh是的,私有框架允许用于企业应用程序。如果您进入TelephonyUtilities的流程,您可能可以执行上述所有操作。如果这是您第一次使用私有框架,我建议您检查同一个[git repo]的自述文件(https://github.com/nst/iOS-Runtime-Headers/blob/master/README.md) ,因为它解释了如何导入并使用它! – isklikas

+0

我能够访问私有框架,但是当我尝试通过TUCallCenter拨打电话时,它不起作用,我使用了所有拨号方法,不知道我错过了什么。你有什么想法吗? –

2

CallKit

显示系统调用对于应用的VoIP服务的用户界面,以及与其他应用程序和系统协调你的呼叫服务。


概述

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

除了处理呼叫之外,您还可以提供呼叫目录应用扩展程序,以提供呼叫者ID信息以及与您的服务关联的阻止号码列表。

接收来电

接收来电方法直截了当导致PushKit这在VOIP应用中使用无声的通知。

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

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

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

希望这有助于了解情况。