Ios轨迹记录:iOS Callkit-来电记录历史记录

我已经在我们的应用程序中实现了呼叫套件,仅用于在应用程序关闭或在后台(推送呼叫通知)时收到的来电。我只是注意到,每次我接到电话并使用 callkit 显示它时,此呼叫都会自动出现在呼叫历史记录中(本机呼叫应用程序中的“最近”选项卡)。

每次我点击其中一个最近,我的应用程序是恢复或启动。我想让应用程序在用户按下最近的电话后拨打电话,但我没有找到任何关于它的信息。

有没有一种方法来检测应用程序被打开 / 恢复从这个电话最近的点击?

我们可以禁用此 callkit 功能吗?

感谢您提供信息:)

3

我想让应用程序在用户按下最近的电话后拨打电话,但我没有找到任何关于它。

在应用的Info.plist中,NSUserActivityTypes键中必须有INStartAudioCallIntent和 / 或INStartVideoCallIntent,并且应用委托必须实现-application:continueUserActivity:restorationHandler:方法来处理开始调用意图。有关详细信息,请参阅 Speakerbox 示例应用。

我们可以禁用此 callkit 功能吗?

如果您没有为呼叫的CXCallUpdate设置remoteHandle,则 Recents 中的项目将不可按。

1

供将来参考;

call kit provider configuration should have this list of generic and phone number types

config.supportedHandleTypes = [.generic,.phoneNumber]

Callkit 更新 remotehandle 应该像一样初始化

 update.remoteHandle = CXHandle(type: .generic, value:String(describing: payload.dictionaryPayload["caller_id"]!))

3.您应该通过选择 project & gt;target & gt;Build Phases & gt;Link Binary With Libraries 并单击 + 按钮将 Intents.framework 添加到您的项目中

您应该将 INStartCallIntent 添加到您的 info.plist,如下所示

<key> NSUserActivityTypes </key>
     <array>
         <string>INStartCallIntent</string>
     </array>

对于 swift 5,您应该将以下函数添加到 SceneDelegate.swift

func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {}

或对于 swift 4 及以下,您应该将以下功能添加到 Appdelegate.swift

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
 return true
}

然后将的代码添加到您的 continue 用户活动函数

let interaction = userActivity.interaction
            if let startAudioCallIntent = interaction?.intent as? INStartAudioCallIntent{
        
                let contact = startAudioCallIntent.contacts?.first
            
                let contactHandle = contact?.personHandle
    
                    if let phoneNumber = contactHandle?.value {
                       print(phoneNumber)
                      // Your Call Logic
                        }
                    }
         
            }
  

你应该得到一个警告

 INStartAudioCallIntent' was deprecated in iOS 13.0: INStartAudioCallIntent is deprecated. Please adopt INStartCallIntent instead

应用此建议失败,因为 startAudioCallIntent 无法强制转换为 INStartCallIntent,因此请忽略它。

非常重要在场景委托中继续 useractivity 函数不被称为 whan 应用程序终止,以便在应用程序启动时运行您的意图,您应该将代码块添加到

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {}

和你的代码应该像

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     
        let contentView = ContentView()
        // Use a UIHostingController as window root view controller.
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: contentView.environmentObject(AppDelegate.shared)) // This is my code so you may not use Appadelegate.shared. ignore it
            self.window = window
            window.makeKeyAndVisible()
        }
        
        
        if let userActivity = connectionOptions.userActivities.first {
            let interaction = userActivity.interaction
            if let startAudioCallIntent = interaction?.intent as? INStartAudioCallIntent{
        
                let contact = startAudioCallIntent.contacts?.first
            
                let contactHandle = contact?.personHandle
                    if let phoneNumber = contactHandle?.value {
                        
                        // Your Call Logic
                    }
         
            }
          }
        
    }

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(195)
Iphone5屏幕大小:如何拍摄iPhone5应用程序的屏幕截图
上一篇
电脑文本代码:动态文本大小根据平板电脑的变化
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(35条)