CallKit Block Number通过JSON API

时间:2017-07-25 04:39:36

标签: ios swift callkit

我想通过我的JSON Api阻止传入号码给用户。我将在JSON API中获取数字列表,我将在呼叫目录扩展中使用我的NSURLSession api请求。是否有可能实现这一目标? 我正在阅读这篇文章 - https://www.raywenderlich.com/150015/callkit-tutorial-ios,他们在扩展执行时会添加一个数字作为黑名单。 根据apple docs扩展将在System接收任何来电时执行。那么我们是否可以获得足够的时间来解雇api并阻止某些数字?或者在这种情况下我们可以使用App组来共享数据库吗?

2 个答案:

答案 0 :(得分:3)

从技术上讲,是的,我们可以从我们的应用扩展程序中发出URLSession个请求。来自Apple文档

  

应用扩展程序可以使用。启动上传或下载   NSURLSession对象,包含那些操作的结果,报告给   包含app。

然而,由于后台任务可能会运行更长时间,因此很有可能无效。在您的情况下触发请求并获取JSON。再次来自苹果documentation,标题为“某些API无法用于附加应用

  

执行长时间运行的后台任务此限制的细节   因平台而异,如本章的扩展点章节所述   文档。

因此,在您的情况下实现呼叫阻止的最佳方法是从包含应用程序下载并存储电话号码列表,并与您的呼叫目录扩展分享。

要在此处做笔记,您的电话号码列表应该是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()
    }
}

答案 1 :(得分:1)

The document说:

  

因为只有当系统启动应用程序扩展而不是每个单独的呼叫时才调用此方法,所以必须同时指定呼叫识别信息;例如,您不能向Web服务发出请求以查找有关来电的信息。

我认为它告诉了你答案。