我一直在开发一个应用程序,用于存储组织内的所有联系人详细信息。主要目标是我的应用程序应该检测传入或传出呼叫,它应该显示该号码所属的人员。例如,这个应用程序将作为Truecaller应用程序。
我尝试使用Google搜索,发现无法在IOS中检测来电号码。
我在ios中阅读了CallKit并了解了Call Directory扩展。虽然我不清楚如何实施它&我不知道这件事是否能解决我的问题。
如果IOS设备接收到来自未知号码的呼叫,系统是否会选择我的应用并搜索未知号码的联系人,并在呼叫者屏幕上显示相关信息?或者还有其他方法吗?
答案 0 :(得分:1)
经过一些不眠之夜,我找到了解决问题的方法。
选择“呼叫目录分机”并单击“下一步”
转到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中的联系人列表进行了任何更改,首先您必须关闭该权限,然后从您的设备中删除您的应用。
每次更新列表时,每次调试应用时都会重做这些步骤。