Browse Source

上传短信无法取消的问题

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
f1594ac596
  1. 35
      local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift

35
local_plugins/chat_api/ios/chat_api/Sources/chat_api/SystemFunctionHandler.swift

@ -568,7 +568,9 @@ private class TranslationModeHandler: FunctionHandler {
}
/// 发送短信处理器
private class SendTextMessageHandler: FunctionHandler {
private class SendTextMessageHandler: NSObject, FunctionHandler, MFMessageComposeViewControllerDelegate {
private var continuation: CheckedContinuation<Result, Never>?
func handle(arguments: [String: Any]) async throws -> String {
guard let contact = arguments["contact"] as? String,
let message = arguments["message"] as? String else {
@ -581,17 +583,19 @@ private class SendTextMessageHandler: FunctionHandler {
private func sendTextMessage(contact: String, message: String) async -> Result {
return await withCheckedContinuation { continuation in
self.continuation = continuation
DispatchQueue.main.async {
if MFMessageComposeViewController.canSendText() {
let messageVC = MFMessageComposeViewController()
messageVC.recipients = [contact]
messageVC.body = message
messageVC.messageComposeDelegate = self // 设置 delegate
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene,
let window = windowScene.windows.first,
let rootViewController = window.rootViewController {
rootViewController.present(messageVC, animated: true)
continuation.resume(returning: Result(success: true, message: "短信界面已打开"))
// 不在这里立即返回结果,等待用户操作
} else {
continuation.resume(returning: Result(success: false, message: "无法打开短信界面"))
}
@ -601,6 +605,33 @@ private class SendTextMessageHandler: FunctionHandler {
}
}
}
// MARK: - MFMessageComposeViewControllerDelegate
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {
controller.dismiss(animated: true) {
// 在界面关闭后返回结果
let message: String
let success: Bool
switch result {
case .cancelled:
message = "用户取消发送短信"
success = false
case .sent:
message = "短信发送成功"
success = true
case .failed:
message = "短信发送失败"
success = false
@unknown default:
message = "未知结果"
success = false
}
self.continuation?.resume(returning: Result(success: success, message: message))
self.continuation = nil
}
}
}
/// 拨打电话处理器

Loading…
Cancel
Save