如何从消息过滤器扩展中获取数据?
How to get data from the Message Filter Extension?
为了传递信息,我使用了App Group。
剩下的就是验证数据传输的两个方向:
将数据从项目的主要部分传输到 MessageFilterExtension。
将数据从 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.
为了传递信息,我使用了App Group。 剩下的就是验证数据传输的两个方向:
将数据从项目的主要部分传输到 MessageFilterExtension。
将数据从 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.