Как получить данные из расширения фильтра сообщений? - PullRequest
0 голосов
/ 25 сентября 2018

Для передачи информации я использовал App Group.Оставалось проверить два направления передачи данных:

  1. Перенос данных из основной части проекта в MessageFilterExtension.

  2. Перенос данныхот MessageFilterExtension до основной части проекта.

Первый способ работал без проблем.Но второе никак не получилось.Вот часть кода, в которую я записываю информацию из MessageFilterExtension.

extension UserDefaults {
    var sender: String? {
        get { return self.string(forKey: #function) }
        set { self.set(newValue, forKey: #function) }
    }
    var messageBody: String? {
        get { return string(forKey: #function) }
        set { set(newValue, forKey: #function) }
    }
    var blockedNumber: String? {
        get { return string(forKey: #function) }
        set { set(newValue, forKey: #function) }
    }
}
extension MessageFilterExtension: ILMessageFilterQueryHandling {
// ...
private func offlineAction(for queryRequest: ILMessageFilterQueryRequest)
                                                       -> ILMessageFilterAction {
    if let userDefaults = UserDefaults(suiteName: "group.GUI.TestExtSms2") {
        userDefaults.sender = queryRequest.sender ?? "No sender"
        userDefaults.messageBody = queryRequest.messageBody ?? "No body"
        if let sender = queryRequest.sender,
            let blockedNumber = userDefaults.blockedNumber {
            return (sender == blockedNumber) ? .filter : .none
        }
    }
    return .none
}

Когда я ввел нужный номер телефона (blockNumber), блокировка сработала.Но я не смог получить данные о SMS (отправитель и messageBody) в основной части проекта.

1 Ответ

0 голосов
/ 03 января 2019

Вы просто не можете.

https://developer.apple.com/documentation/sms_and_call_reporting/sms_and_mms_message_filtering

В целях конфиденциальности система обрабатывает все коммуникации с вашим связанным сервером;ваше расширение приложения Message Filter не может получить прямой доступ к сети.

Кроме того, из соображений конфиденциальности ваше расширение приложения не может записывать данные в контейнеры, к которым предоставлен общий доступ.

...