Проблема с идентификацией идентификатора вызывающего абонента при использовании расширения каталога вызовов
Я пробовал много решений для расширения CallKit, чтобы показать идентификатор звонящего.
шаги:
- Добавление расширения каталога вызовов в мой проект.
- Установить developer.apple.com вещи и группы приложений (для использования userDefaults)
Реализуйте код. (Для тестирования используется как массив телефонных номеров, который хранится в userDefaults, так и статический номер).
Разрешить мое приложение в настройках устройства для идентификации и блокировки вызовов
private func addAllIdentificationPhoneNumbers(to context: CXCallDirectoryExtensionContext) { 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) } }
Для проверки статических чисел:
private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [String], labels: [String])? {
// retrieve list of phone numbers to identify, and their labels
return (["EXAMPLE_NUMBER"], ["EXAMPLE_NAME"])
}
Для реальной жизни использую:
private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [String], labels: [String])? {
// retrieve list of phone numbers to identify, and their labels
var numbers = [String]()
var names = [String]()
let sharedDefaults = UserDefaults.init(suiteName: "group.EXTENSION_NAME")
numbers = sharedDefaults?.array(forKey: "contactsPhoneNumbers") as! [String]
names = sharedDefaults?.array(forKey: "contactsNames") as! [String]
return (numbers, names)
}
Но это не сработало. Когда я звоню себе с номера, который реализован в функции addAllIdentificationPhoneNumbers, я вижу только номер телефона и название страны. Нужно ли добавлять какой-либо код в AppDelegate или где-то еще? Я имею в виду входящий звонок должен быть обработан в основном приложении? Вы можете мне помочь?