我想通过我的JSON Api阻止传入号码给用户。我将在JSON API中获取数字列表,我将在呼叫目录扩展中使用我的NSURLSession api请求。是否有可能实现这一目标?我正在阅读这篇文章 - https://www.raywenderlich.com/150015/callkit-tutorial-ios,当扩展将执行时,他们正在添加一个数字作为黑名单。根据apple docs扩展将在System接收任何来电时执行。那么我们是否可以获得足够的时间来解雇api并阻止某些数字?或者在这种情况下我们可以使用App组来共享数据库吗?
技术上是的,我们可以从我们的应用扩展程序中发出URLSession
请求。来自Apple文档
应用扩展程序可以使用NSURLSession对象启动上载或下载,并将这些操作的结果报告给包含的应用程序。
但是,由于后台任务可能会运行更长时间,因此很可能无法正常工作。在您的情况下触发请求并获取JSON。再次来自苹果documentation,标题为“某些API不适用于App扩展”
执行长时间运行的后台任务此限制的细节因平台而异,如本文档的扩展点章节所述。
因此,在您的情况下实现呼叫阻止的最佳方法是从包含应用程序下载并存储电话号码列表,并与您的呼叫目录扩展共享。
要在此处记下,您的电话号码列表应该是Int64的排序列表,否则您可能会遇到错误。
有关Blocking Incoming Calls的更多信息
您可以在addBlockingEntry(withNextSequentialPhoneNumber:)
方法的实现中使用override func beginRequest(with context: CXCallDirectoryExtensionContext)
方法。
class CustomCallDirectoryProvider: CXCallDirectoryProvider {
override func beginRequest(with context: CXCallDirectoryExtensionContext) {
let blockedPhoneNumbers: [CXCallDirectoryPhoneNumber] = [ … ]
for phoneNumber in blockedPhoneNumbers.sorted(by: <) {
context.addBlockingEntry(withNextSequentialPhoneNumber: phoneNumber)
}
context.completeRequest()
}
}
因为只有在系统启动应用程序扩展而不是每个单独的呼叫时才调用此方法,所以必须同时指定呼叫识别信息;例如,您不能向Web服务发出请求以查找有关来电的信息。
我认为它告诉了你答案。