如何在应用程序中获取voip通话记录信息 - Call Kit

Shu*_*ham 2 ios swift callkit

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

- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
 restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler  
Run Code Online (Sandbox Code Playgroud)

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

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

Shu*_*ham 5

Swift 4 中的完整解决方案

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

  • 在 CXProviderConfiguration 中添加 supportedHandleTypes 属性

        let configuration = CXProviderConfiguration.init(localizedName:"Product name")
        configuration.supportedHandleTypes = Set([CXHandle.HandleType.generic])
    
    Run Code Online (Sandbox Code Playgroud)
  • 在项目的 Info.plist 中添加 INStartAudioCallIntent 类型的 NSUserActivityTypes 在此处输入图片说明

  • 目标项目 -> 构建阶段 -> 库添加 Intents.framework

  • 在 AppDelegate 中导入 Intents 框架
  • 下面是从 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
    }
    
    Run Code Online (Sandbox Code Playgroud)

    希望这对你有帮助。