Envio de SMS em Swift (iOS/macOS): API da biblioteca MessageUI
No desenvolvimento mobile moderno, a capacidade de enviar SMS diretamente do aplicativo continua sendo uma funcionalidade requisitada. Nas plataformas Apple (iOS e macOS), essa tarefa é resolvida pela biblioteca integrada MessageUI.framework. Ela fornece uma interface conveniente para criar e enviar mensagens de texto, sem exigir a conexão de serviços de terceiros. Neste artigo, vamos detalhar como usar a API MessageUI para enviar SMS em Swift, abordar exemplos de código, tratamento de erros e particularidades de funcionamento em diferentes dispositivos.
O que é o MessageUI.framework?
MessageUI é um framework de sistema da Apple que permite que aplicativos se integrem ao aplicativo nativo "Mensagens". A classe principal para trabalhar com SMS é MFMessageComposeViewController. Ela fornece um controlador de UI pronto para compor e enviar mensagens. É importante observar que esta API funciona apenas em dispositivos reais com um chip SIM ativo (para iOS) ou em Mac com iMessage configurado (macOS 10.15+). No simulador, a funcionalidade não está disponível.
Preparação do projeto
Para usar o MessageUI, é necessário:
- Conectar o framework
MessageUIao projeto (geralmente ele já está na biblioteca padrão). - Adicionar a importação no arquivo onde o envio será chamado:
import MessageUI. - Verificar se o dispositivo pode enviar SMS — checar através de
MFMessageComposeViewController.canSendText().
Exemplo básico de envio de SMS
Vamos considerar um exemplo simples: criar o controlador, definir o destinatário e o texto, e então exibi-lo.
import UIKitimport MessageUI
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
@IBAction func sendSMSTapped(_ sender: UIButton) { // Verifica se o dispositivo pode enviar SMS guard MFMessageComposeViewController.canSendText() else { print("O dispositivo não suporta envio de SMS") return }
// Cria uma instância do controlador let messageVC = MFMessageComposeViewController() messageVC.messageComposeDelegate = self
// Define o destinatário messageVC.recipients = ["+79991234567"]
// Define o texto da mensagem messageVC.body = "Olá! Esta é uma mensagem de teste do meu aplicativo."
// Exibe o controlador present(messageVC, animated: true, completion: nil) }
// MARK: - MFMessageComposeViewControllerDelegate func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { // Fecha o controlador após envio/cancelamento dismiss(animated: true, completion: nil)
// Processa o resultado switch result { case .sent: print("Mensagem enviada com sucesso") case .cancelled: print("Envio cancelado pelo usuário") case .failed: print("Erro ao enviar a mensagem") @unknown default: print("Resultado desconhecido") } }}Neste código, nós:
- Verificamos a possibilidade de envio com
canSendText(). - Criamos um
MFMessageComposeViewControllere configuramos os destinatários e o corpo da mensagem. - Definimos o delegado (
messageComposeDelegate) para processar o resultado. - No método do delegado, tratamos quatro possíveis resultados: enviado, cancelado, erro, status desconhecido.
Funcionalidades adicionais
O MessageUI suporta não apenas texto simples, mas também anexos:
// Adicionando anexo (por exemplo, uma imagem)if let imageData = UIImage(named: "photo")?.pngData() { messageVC.addAttachmentD