iOS开发:如何向多个收件人单独发iMessage且不创建群聊?
如何避免iMessage自动创建群聊,实现向多收件人单独发送消息
想要给多个收件人发送同一条消息,但使用iMessage时会自动创建包含所有收件人的群聊。如何避免这种情况,实现向每位用户单独发送消息,同时无需为每个用户单独弹出发送界面?
完整可直接复制使用的Swift代码
import SwiftUI import MessageUI struct SendMessageView: View { @State private var isShowingMessages = false @State private var recipients = ["<手机号1>", "<手机号2>"] @State private var message = "你好" var body: some View { Button(action: { self.isShowingMessages.toggle() }) { Text("打开消息界面") } .sheet(isPresented: self.$isShowingMessages) { MessageUIView(recipients: $recipients, body: $message, completion: handleCompletion(_:)) } } func handleCompletion(_ result: MessageComposeResult) { switch result { case .cancelled: // 处理取消发送的逻辑 break case .sent: // 处理发送成功的逻辑 break case .failed: // 处理发送失败的逻辑 break @unknown default: // 处理未知状态的逻辑 break } } } protocol MessagessViewDelegate { func messageCompletion(result: MessageComposeResult) } class MessagesViewController: UIViewController, MFMessageComposeViewControllerDelegate { var delegate: MessagessViewDelegate? var recipients: [String]? var body: String? override func viewDidLoad() { super.viewDidLoad() } func displayMessageInterface() { let composeVC = MFMessageComposeViewController() composeVC.messageComposeDelegate = self // 配置消息界面字段 composeVC.recipients = self.recipients ?? [] composeVC.body = body ?? "" // 模态弹出消息界面 if MFMessageComposeViewController.canSendText() { self.present(composeVC, animated: true, completion: nil) } else { self.delegate?.messageCompletion(result: MessageComposeResult.failed) } } func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { controller.dismiss(animated: true) self.delegate?.messageCompletion(result: result) } } struct MessageUIView: UIViewControllerRepresentable { // 用于在消息操作完成后关闭界面 @Environment(\.presentationMode) var presentationMode @Binding var recipients: [String] @Binding var body: String var completion: ((_ result: MessageComposeResult) -> Void) func makeCoordinator() -> Coordinator { Coordinator(self) } func makeUIViewController(context: Context) -> MessagesViewController { let controller = MessagesViewController() controller.delegate = context.coordinator controller.recipients = recipients controller.body = body return controller } func updateUIViewController(_ uiViewController: MessagesViewController, context: Context) { uiViewController.recipients = recipients uiViewController.displayMessageInterface() } class Coordinator: NSObject, UINavigationControllerDelegate, MessagessViewDelegate { var parent: MessageUIView init(_ controller: MessageUIView) { self.parent = controller } func messageCompletion(result: MessageComposeResult) { self.parent.presentationMode.wrappedValue.dismiss() self.parent.completion(result) } } }
关键调整说明
上述默认代码仍会创建群聊,若要实现单独给每个收件人发消息,需要修改消息发送逻辑:
- 遍历
recipients数组,逐个传入单个收件人到composeVC.recipients - 可添加延迟处理,避免多个消息界面同时弹出导致冲突
内容的提问来源于stack exchange,提问作者Ahmed Zaidan
相关产品推荐
相关产品推荐

