如何从消息过滤器扩展中获取数据?

How to get data from the Message Filter Extension?

为了传递信息,我使用了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
}

当我输入所需的 phone 号码 (blockedNumber) 时,锁起作用了。 但是我无法在项目的主要部分获取有关SMS(发件人和messageBody)的数据。

你就是做不到。

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

For privacy reasons, the system handles all communication with your associated server; your Message Filter app extension can't access the network directly.

Also for privacy reasons, your app extension can't write data to containers shared with the containing app.