如何从消息筛选器扩展获取数据?

时间:2018-09-25 09:37:29

标签: ios swift ios-app-group imessagefilter

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

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

1 个答案:

答案 0 :(得分:0)

你不能。

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

  

出于隐私原因,系统会处理与您的所有通信   关联服务器;您的邮件过滤器应用扩展程序无法访问   直接联网。

     

出于隐私原因,您的应用扩展程序无法将数据写入   与包含的应用共享的容器。