如何在 iOS 10 上使用 CallKit 显示来电显示(添加标识条目)
Posted
技术标签:
【中文标题】如何在 iOS 10 上使用 CallKit 显示来电显示(添加标识条目)【英文标题】:How to display caller id (add identification entry) using CallKit on iOS 10 【发布时间】:2016-09-20 19:16:16 【问题描述】:我在 Xcode 中创建了一个基本的呼叫目录扩展。它附带的示例代码显示了如何阻止电话号码或显示有关电话号码的信息。以下是阻止电话号码 22334455 所需的最少代码:
class CallDirectoryHandler: CXCallDirectoryProvider
override func beginRequest(with context: CXCallDirectoryExtensionContext)
context.delegate = self
context.addBlockingEntry(withNextSequentialPhoneNumber: 22334455)
//context.addIdentificationEntry(withNextSequentialPhoneNumber: 22334455, label: "Telemarketer")
context.completeRequest()
extension CallDirectoryHandler: CXCallDirectoryExtensionContextDelegate
func requestFailed(for extensionContext: CXCallDirectoryExtensionContext, withError error: Error)
根据 Xcode 中的示例,使用方法 addIdentificationEntry 而不是 addBlockingEntry 应该同样容易显示呼叫者 ID,但我无法让它工作。
阻止工作正常,但如果我尝试显示来电显示,电话只会显示电话号码。它没有显示我尝试添加的文本“Telemarketer”。
我错过了什么?
【问题讨论】:
【参考方案1】:答案简单得令人沮丧。
addIdentificationEntry() 需要国家代码,addBlockingEntry() 不需要。
当我在电话号码的开头添加 47(挪威的国家代码)时,它起作用了。这是显示挪威电话号码 22334455 (+4722334455) 的来电显示的工作代码:
class CallDirectoryHandler: CXCallDirectoryProvider
override func beginRequest(with context: CXCallDirectoryExtensionContext)
context.delegate = self
context.addIdentificationEntry(withNextSequentialPhoneNumber: 4722334455, label: "Telemarketer")
context.completeRequest()
addBlockingEntry() 使用 22334455 和 4722334455 作为输入。
【讨论】:
有没有办法获取当前正在呼叫的电话号码,而不是将所有已知号码和标签放入 beginRequest 呼叫? 我不确定,我自己也想知道。我的计划是拥有数千个号码,所以我希望能够按计划而不是在电话响铃时填充 CallDirectory。 是的,我也是——我的计划是添加大约 50.000 个数字——也许我可以在必须全部添加之前简单地添加一个数据库查询 @Bjarte Aune Olsen:我已经完成了演示应用程序,但是在设置/电话/呼叫阻止和识别/myapp 中没有启用。请帮忙。 这意味着你的扩展由于某种原因崩溃了。当扩展程序崩溃时,很难找到错误的原因,因为您无法调试它。我所做的是在扩展中创建一个日志函数,它将发生的所有事情写入日志文件。然后我在应用程序中创建了一个日志阅读器功能,可以显示日志文件的内容。要使这项工作正常进行,您首先必须将应用程序和扩展程序都添加到同一个应用程序组,以便它们可以读取/写入同一个日志文件。以上是关于如何在 iOS 10 上使用 CallKit 显示来电显示(添加标识条目)的主要内容,如果未能解决你的问题,请参考以下文章
使用 CallKit 接听电话时如何显示 ViewController