Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS中识别未知GSM呼叫_Ios_Swift_Swift3_Callkit - Fatal编程技术网

在iOS中识别未知GSM呼叫

在iOS中识别未知GSM呼叫,ios,swift,swift3,callkit,Ios,Swift,Swift3,Callkit,我一直在开发一个应用程序,该应用程序存储组织内的所有联系人详细信息。主要目标是我的应用程序应该能够检测来电或呼出电话,并显示号码所属的人。例如,此应用程序将作为Truecaller应用程序使用 我试着用谷歌搜索,发现在IOS中无法检测到来电号码 我在ios中阅读了CallKit,并了解了Call目录扩展。虽然我不清楚如何实现它&我不知道这件事是否能解决我的问题 如果IOS设备收到来自未知号码的呼叫,系统会选择我的应用程序并搜索未知号码的联系人,并且会在来电屏幕上显示相关信息吗?或者还有其他方法吗

我一直在开发一个应用程序,该应用程序存储组织内的所有联系人详细信息。主要目标是我的应用程序应该能够检测来电或呼出电话,并显示号码所属的人。例如,此应用程序将作为Truecaller应用程序使用

我试着用谷歌搜索,发现在IOS中无法检测到来电号码

我在ios中阅读了CallKit,并了解了Call目录扩展。虽然我不清楚如何实现它&我不知道这件事是否能解决我的问题


如果IOS设备收到来自未知号码的呼叫,系统会选择我的应用程序并搜索未知号码的联系人,并且会在来电屏幕上显示相关信息吗?或者还有其他方法吗

经过几个不眠之夜,我找到了解决问题的办法

  • 在Xcode中,转到文件->新建->目标
  • 选择呼叫目录扩展并单击下一步
  • 并给出任何名称,然后单击finish
  • 现在,您的应用程序应该与此类似
  • 转到CallDirectoryExtension.swift并用以下代码替换代码

    import Foundation 
    import CallKit
    class CallDirectoryHandler: CXCallDirectoryProvider {
    override func beginRequest(with context: CXCallDirectoryExtensionContext) {
        guard let phoneNumbersToBlock = retrievePhoneNumbersToBlock() else {
            NSLog("Unable to retrieve phone numbers to block")
            let error = NSError(domain: "CallDirectoryHandler", code: 1, userInfo: nil)
            context.cancelRequest(withError: error)
            return
        }
    
        for phoneNumber in phoneNumbersToBlock {
            context.addBlockingEntry(withNextSequentialPhoneNumber: CXCallDirectoryPhoneNumber(phoneNumber)!)
        }
    
        guard let (phoneNumbersToIdentify, phoneNumberIdentificationLabels) = retrievePhoneNumbersToIdentifyAndLabels() else {
            NSLog("Unable to retrieve phone numbers to identify and their labels")
            let error = NSError(domain: "CallDirectoryHandler", code: 2, userInfo: nil)
            context.cancelRequest(withError: error)
            return
        }
    
        for (phoneNumber, label) in zip(phoneNumbersToIdentify, phoneNumberIdentificationLabels) {
            context.addIdentificationEntry(withNextSequentialPhoneNumber: CXCallDirectoryPhoneNumber(phoneNumber)!, label: label)
        }
    
        context.completeRequest { (suc) in
            print(suc)
        }
    }
    
    private func retrievePhoneNumbersToBlock() -> [String]? {
        // retrieve list of phone numbers to block
        return ["+8612345678901","+8618180100980"]
    }
    
    private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [String], labels: [String])? {
        // retrieve list of phone numbers to identify, and their labels
        return (["+94123456789", "+94234567891"],
                ["John Doe","Angelina Jollie",])
    }
    
    }
    

    现在运行并启动你的应用程序。然后进入设置->电话->呼叫阻止和识别,然后打开权限

    注意:如果您在CallDirectoryHandler中对联系人列表进行了任何更改,首先必须关闭权限,然后从设备中删除应用


    每次调试应用程序时,无论何时更新列表,都要重复这些步骤

    CallKit文档中有一节直接介绍了这一点,请参阅。是的,您需要通过CallKit实现调用方识别。你需要写一个扩展名,通过扩展名在iOS上注册你的名字和号码,谢谢你给了我一些希望。您有我可以参考的任何来源吗?呼叫阻止和识别未关闭,导致应用程序提供的数据无效的错误。请检查您的号码列表。它应该是上升的order@ShiranGabriel因此,如果我用新号码更新live应用程序,那么用户也必须重新安装该应用程序?Hello@ShiranGabriel,有没有阻止传出呼叫的方法?@Mannambrahman Nop