如何在应用程序中获取voip调用日志信息 - Call Kit

时间:2017-02-07 14:03:22

标签: ios callkit

我已经在我的voip应用程序中实现了呼叫工具包,我在其中生成传入或传出呼叫的呼叫记录(在电话最近选项卡上可见)。 当我点击通话记录时,它将打开我的应用程序。我已覆盖UIApplication委托方法以获取处理程序。

- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
 restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler  

但我无法在NSUserActivity中获取与通话记录相关的信息。 我如何在我的应用程序中获取通话记录信息?

任何帮助都非常感激。谢谢!

3 个答案:

答案 0 :(得分:3)

我们可以从 userActivity 中获取电话号码

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restora`tionHandler:(void(^)(NSArray * __nullable restorableObjects))restorationHandler{
    INInteraction *interaction = userActivity.interaction;
    INStartAudioCallIntent *startAudioCallIntent = (INStartAudioCallIntent *)interaction.intent;
    INPerson *contact = startAudioCallIntent.contacts[0];
    INPersonHandle *personHandle = contact.personHandle;
    NSString *phoneNumber = personHandle.value;
}

答案 1 :(得分:2)

Swift 4中的完整解决方案

您需要配置您的应用程序才能继续调用userActivity。

  • 在CXProviderConfiguration中添加supportedHandleTypes属性

        let configuration = CXProviderConfiguration.init(localizedName:"Product name")
        configuration.supportedHandleTypes = Set([CXHandle.HandleType.generic])
    
  • 在项目enter image description here

  • 的Info.plist中添加INStartAudioCallIntent类型的NSUserActivityTypes
  • 目标项目->构建阶段->库添加Intents.framework

  • 在AppDelegate中导入意图框架
  • 下面是从userActivity中提取电话号码的代码

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        let intraction = userActivity.interaction
        let startAudioCallIntent = intraction?.intent as? INStartAudioCallIntent
        let contact = startAudioCallIntent?.contacts?[0]
        let contactHandle = contact?.personHandle
        if let phoneNumber = contactHandle?.value {
           print(phoneNumber)
        }
        return true
    }
    

    希望这对您有所帮助。

答案 2 :(得分:0)

呼叫信息封装在INPerson对象中,可以从INInteraction对象进行解析。

向SiriKit提供联系人时,任何INInteraction对象 交付给其他应用程序包括INPerson中包含的信息 对象。不要包含您不愿意的任何信息 与其他应用共享。

您必须从NSActivity对象获取交互和意图对象。

in