Envío de SMS en Swift (iOS/macOS): descripción general de bibliotecas y API
En el desarrollo móvil moderno, la capacidad de enviar mensajes SMS sigue siendo una función demandada: desde la verificación del número de teléfono hasta notificaciones masivas. En el ecosistema de Apple (iOS/macOS) con el lenguaje Swift, existen varios enfoques, desde el integrado MessageUI hasta la integración con proveedores de SMS en la nube. En este artículo, analizaremos las principales bibliotecas y API, sus ventajas y limitaciones, y proporcionaremos ejemplos prácticos de código.
1. Biblioteca integrada MessageUI
La forma más sencilla es utilizar el framework MessageUI, disponible en iOS y macOS. Permite invocar la interfaz estándar de envío de SMS (a través de MFMessageComposeViewController) sin necesidad de conectar SDK de terceros.
Capacidades:
- Envío de SMS a través de la aplicación del sistema «Mensajes».
- Soporte para archivos adjuntos (imágenes, videos, contactos).
- No requiere registro en un proveedor.
Limitaciones:
- Solo funciona en dispositivos físicos (no en el simulador).
- El usuario ve la interfaz y confirma el envío.
- No es adecuado para envío automático (del lado del servidor).
Ejemplo de código en Swift (iOS):
import MessageUIimport UIKit
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
@IBAction func sendSMSTapped(_ sender: UIButton) { guard MFMessageComposeViewController.canSendText() else { print("El dispositivo no soporta el envío de SMS") return } let messageVC = MFMessageComposeViewController() messageVC.body = "¡Hola! Este es un SMS de prueba desde Swift." messageVC.recipients = ["+59123456789"] messageVC.messageComposeDelegate = self present(messageVC, animated: true, completion: nil) }
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { switch result { case .sent: print("SMS enviado") case .cancelled: print("Cancelado por el usuario") case .failed: print("Error al enviar") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}Para macOS se utiliza NSSharingService con el tipo .composeMessage, pero su funcionalidad es limitada.
2. Twilio — API en la nube para SMS
Twilio es uno de los servicios más populares para el envío programático de SMS. La integración en una aplicación Swift se realiza a través de la API REST o el cliente oficial de Swift twilio-swift.
Ventajas:
- Alta velocidad de entrega, soporte en más de 100 países.
- Posibilidad de envío sin intervención del usuario (lógica del lado del servidor).
- Configuración flexible: remitente, plantillas, webhooks.
Ejemplo de envío mediante URLSession:
import Foundation
func sendSMSviaTwilio(to phoneNumber: String, message: String) { let accountSID = "YOUR_ACCOUNT_SID" let authToken = "YOUR_AUTH_TOKEN" let fromNumber = "+1234567890" // su número de Twilio let urlString = "https://api.twilio.com/2010-04-01/Accounts/\\(accountSID)/Messages.json" guard let url = URL(string: urlString) else { return } var request = URLRequest(url: url) request.httpMethod = "POST" let loginString = "\\(accountSID):\\(authToken)" guard let loginData = loginString.data(using: .utf8) else { return } let base64Login = loginData.base64EncodedString() request.setValue("Basic \\(base64Login)", forHTTPHeaderField: "Authorization") let bodyParams = "To=\\(phoneNumber)&From=\\(fromNumber)&Body=\\(message)"