Как отобразить идентификатор вызывающего абонента (добавить идентификационную запись) с помощью CallKit на iOS 10

Я создал базовое расширение каталога вызовов в 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, но я не могу заставить его работать.

Блокировка работает нормально, но если я попытаюсь вместо этого отобразить идентификатор вызывающего абонента, телефон просто отобразит номер телефона. Он не показывает текст «Телемаркетер», который я пытаюсь добавить.

Что мне не хватает?


person Bjarte Aune Olsen    schedule 20.09.2016    source источник


Ответы (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 в качестве входных данных.

person Bjarte Aune Olsen    schedule 20.09.2016
comment
Есть ли способ получить номер телефона, который в настоящее время звонит, вместо того, чтобы помещать все известные номера и ярлыки в вызов beginRequest? - person Steve; 28.09.2016
comment
Я не уверен, я хотел бы знать это сам. В моих планах иметь тысячи номеров, поэтому я надеюсь, что можно как-то заполнять CallDirectory по расписанию, а не когда звонит телефон. - person Bjarte Aune Olsen; 29.09.2016
comment
Да, я тоже - мой план состоит в том, чтобы добавить около 50 000 номеров. Возможно, я мог бы просто добавить запрос к базе данных, прежде чем мне нужно будет добавить их все - person Steve; 29.09.2016
comment
@Bjarte Aune Olsen: я сделал демо-приложение, но в настройках/Телефон/Блокировка вызовов и идентификация/myapp не включается. Пожалуйста помоги. - person Ved; 15.12.2016
comment
Это означает, что у вас по какой-то причине происходит сбой расширения. Довольно сложно найти причину ошибки при сбое расширения, так как вы не можете его отладить. Что я сделал, так это создал функцию журнала в расширении, которая записывает все, что происходит, в файл журнала. Затем я создал функцию чтения журнала внутри приложения, которая может отображать содержимое файла журнала. Чтобы это работало, вам сначала нужно добавить и приложение, и расширение в одну и ту же группу приложений, чтобы они могли читать и записывать в один и тот же файл журнала. - person Bjarte Aune Olsen; 16.12.2016
comment
Привет, @BjarteAuneOlsen! В настоящее время я работаю над расширением небольшого приложения, аналогичным тому, что вы использовали в этой теме, и моя проблема также связана с отладкой. Не могли бы вы поделиться функцией файла журнала в расширении, а также в приложении-контейнере? Было бы очень полезно, учитывая, что мой крайний срок истекает в понедельник :-S - person PinkFloydRocks; 13.09.2017
comment
Возможно, я смогу выложить какой-нибудь пример кода, но, боюсь, не раньше понедельника. - person Bjarte Aune Olsen; 14.09.2017