在TouchID身份验证后无法插入消息

时间:2017-08-31 19:07:34

标签: ios swift imessage-extension

所以我正在玩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警报时是否有效,是否存在错误或预期的行为?

0 个答案:

没有答案