CallKit通话目录扩展中的错误

6

我正在我的iOS项目中实现CallKit,我使用了CallDirectory扩展来阻止和识别号码,阻止部分工作得很完美,唯一的问题是当我尝试添加要识别的号码时:

private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [String], labels: [String])? {
    // retrieve list of phone numbers to identify, and their labels
    interDefaults?.synchronize()
    if let numbers = interDefaults!.string(forKey: "ident-numbers"){
        if let identities = interDefaults!.string(forKey: "ident-identities"){
            let formattedNumbers = numbers.characters.split{$0 == "*"}.map(String.init)
            let formattedIdent = identities.characters.split{$0 == "*"}.map(String.init)
            return (formattedNumbers, formattedIdent)
        }
    }
    return ([""], [""])

}

当我尝试重新载入扩展时,出现错误:Error Domain=com.apple.CallKit.error.calldirectorymanager Code=3 "(null)"
经过一些测试,我发现通过将formattedIdent替换为只包含一个元素的数组(例如:["Spamm Caller"]),扩展可以完美地运行且不出现任何错误。但当我使用包含多个元素的数组时,仍然会出现相同的错误。
我是否做错了什么?提前感谢您的帮助。

当我在开发应用程序时,我的iOS处于勿扰模式下,因此出现了这个错误。 - matusalem
@matusalem,我该如何在iOS应用程序中使用Callkit激活“勿扰模式”? - Pramod
@pramod 我认为它不包含在Callkit SDK中。 - matusalem
@pramod 我认为它没有包含在Callkit SDK中。 - matusalem
3个回答

7

我遇到了类似的问题,但我犯了一个错误,那就是错误代码4。所以我深入研究了CXErrors并找到了这个枚举。

public enum Code : Int {


        public typealias _ErrorType = CXErrorCodeCallDirectoryManagerError

        case unknown

        case noExtensionFound

        case loadingInterrupted

        case entriesOutOfOrder

        case duplicateEntries

        case maximumEntriesExceeded

        case extensionDisabled

        @available(iOS 10.3, *)
        case currentlyLoading

        @available(iOS 11.0, *)
        case unexpectedIncrementalRemoval
    }

基本上unknown == Code 0,而其他选项则依次递增。以下是迄今为止您的扩展程序在处理新数据时可能收到的所有错误列表。


2

CallDirectory 中的错误代码在头文件 <CallKit/CXError.h> 中定义,该文件包括以下内容:

    CXErrorCodeCallDirectoryManagerErrorEntriesOutOfOrder = 3,

当提供的电话号码顺序不正确时,将返回此特定错误。电话号码必须按数字升序提供。


谢谢,我非常确定我提供的数字是有序的! - Med Abida
请查看此链接:http://stackoverflow.com/questions/40837561/how-to-use-call-directory-extension-to-identify-a-incoming-call/40838374#40838374 - Saurabh Jain
1
有一段时间,我在使用数字字符串并对其进行排序。但是,由于数字的长度可能不同,这种方法行不通。一旦我开始将它们作为 NSNumbers 进行处理(用于排序),一切都很好。另外,请确保删除重复的数字。 - Mc.Stever

0
我知道我的数字已经正确排序,但是我仍然收到错误3。解决方法是注释掉CallDirectoryHandler文件中私有函数中的示例代码。
目前我只使用来电者ID,但是如果我也使用了阻止功能,那么我也会删除该示例代码。

screen grab - commented out code in red


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接