所以我正在玩iMessage应用程序,并且遇到了一个奇怪的问题。我想尝试在iMessage中使用TouchID身份验证,并且能够从iMessage应用程序中正确地弹出TouchID警报。但是,当我去插入显示TouchID结果的消息时,它不会为我插入消息。这是相关代码:
@IBAction func authenticateTapped(_ sender: Any) {
let context = LAContext()
var wasSuccessful = false
self.group.enter()
context.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics, localizedReason: "Testing authentication") { (successful, _) in
wasSuccessful = successful
self.group.leave()
}
self.group.notify(queue: DispatchQueue.main) {
self.sendResult(wasSuccessful)
}
}
@IBAction func sendMessageTapped(_ sender: Any) {
sendResult(true)
}
func sendResult(_ successful: Bool) {
guard let conversation = self.activeConversation else { fatalError("expected conversation") }
var components = URLComponents()
components.queryItems = [URLQueryItem(name: "successful", value: successful.description)]
let layout = MSMessageTemplateLayout()
layout.image = UIImage(named: "green_checkmark")
layout.caption = "Authentication Result"
let message = MSMessage(session: conversation.selectedMessage?.session ?? MSSession())
message.url = components.url!
message.layout = layout
print("queryParts: \(String(describing: components.queryItems))")
print("message: \(message)")
print("activeConversation: \(String(describing: conversation))")
conversation.insert(message) {
(error) in
print("in completion handler")
print(error ?? "no error")
}
}
触发authenticateTapped
时,TouchID提示会显示,我成功进行身份验证,然后查看sendResult
消息中的每条日志消息,但insert
消息中的任何消息除外{1}}方法。
奇怪的是,当sendMessageTapped
方法被触发时,一切都按预期工作。有谁知道这里发生了什么,为什么我在使用TouchID成功验证后似乎无法插入消息?
我唯一可以想到的是两者之间的不同之处在于,当TouchID提示出现时,视图控制器正在消失,但是,如果这是原因,我会期望没有{{1除了完成处理程序中的那些语句之外,每个人都会在控制台中显示语句吗?
编辑:我已经做了一些挖掘。在print
模式下显示Touch ID身份验证时,视图控制器将重新启动。以compact
模式呈现时,它会保持活动状态,允许您插入消息。
有人知道在提交Touch ID警报时是否有效,是否存在错误或预期的行为?