Envío de SMS en Swift (iOS/macOS): API de la biblioteca MessageUI
En el desarrollo móvil moderno, la capacidad de enviar SMS directamente desde la aplicación sigue siendo una función solicitada. En las plataformas de Apple (iOS y macOS), esta tarea la resuelve la biblioteca integrada MessageUI.framework. Proporciona una interfaz conveniente para crear y enviar mensajes de texto, sin necesidad de conectar servicios de terceros. En este artículo, analizaremos en detalle cómo usar la API de MessageUI para enviar SMS en Swift, veremos ejemplos de código, manejo de errores y particularidades de funcionamiento en diferentes dispositivos.
¿Qué es MessageUI.framework?
MessageUI es un framework de sistema de Apple que permite a las aplicaciones integrarse con la aplicación integrada «Mensajes». La clase principal para trabajar con SMS es MFMessageComposeViewController. Proporciona un controlador de UI listo para redactar y enviar mensajes. Es importante señalar que esta API solo funciona en dispositivos reales con una tarjeta SIM activa (para iOS) o en Mac con iMessage configurado (macOS 10.15+). En el simulador, la funcionalidad no está disponible.
Preparación del proyecto
Para usar MessageUI es necesario:
- Conectar el framework
MessageUIal proyecto (normalmente ya está en la biblioteca estándar). - Añadir la importación en el archivo donde se llamará al envío:
import MessageUI. - Asegurarse de que el dispositivo puede enviar SMS — verificar mediante
MFMessageComposeViewController.canSendText().
Ejemplo básico de envío de SMS
Veamos un ejemplo muy simple: crear un controlador, establecer el destinatario y el texto, y luego mostrarlo.
import UIKitimport MessageUI
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
@IBAction func sendSMSTapped(_ sender: UIButton) { // Verificamos si el dispositivo puede enviar SMS guard MFMessageComposeViewController.canSendText() else { print("El dispositivo no soporta el envío de SMS") return }
// Creamos una instancia del controlador let messageVC = MFMessageComposeViewController() messageVC.messageComposeDelegate = self
// Establecemos el destinatario messageVC.recipients = ["+79991234567"]
// Establecemos el texto del mensaje messageVC.body = "¡Hola! Este es un mensaje de prueba desde mi aplicación."
// Mostramos el controlador present(messageVC, animated: true, completion: nil) }
// MARK: - MFMessageComposeViewControllerDelegate func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { // Cerramos el controlador después de enviar/cancelar dismiss(animated: true, completion: nil)
// Procesamos el resultado switch result { case .sent: print("Mensaje enviado exitosamente") case .cancelled: print("Envío cancelado por el usuario") case .failed: print("Error al enviar el mensaje") @unknown default: print("Resultado desconocido") } }}En este código:
- Verificamos la posibilidad de envío con
canSendText(). - Creamos un
MFMessageComposeViewControllery configuramos los destinatarios y el cuerpo del mensaje. - Establecemos el delegado (
messageComposeDelegate) para manejar el resultado. - En el método del delegado manejamos cuatro posibles resultados: enviado, cancelado, error, estado desconocido.
Funcionalidades adicionales
MessageUI no solo soporta texto simple, sino también archivos adjuntos:
// Añadir un archivo adjunto (por ejemplo, una imagen)if let imageData = UIImage(named: "photo")?.pngData() { messageVC.addAttachmentD También en la biblioteca
Awilix para TypeScript: guía completa del contenedor DI
Biometric para Kotlin: guía completa con ejemplos prácticos
Trabajo con Excel en C# (.NET): Bibliotecas EPPlus y ClosedXML