Envío de SMS en Swift (iOS/macOS): API y bibliotecas
En el desarrollo para iOS y macOS, a menudo surge la necesidad de enviar mensajes SMS — para verificación de usuarios, envío de notificaciones o integración con CRM. En este artículo, analizaremos dos enfoques principales: el uso del framework integrado MessageUI para enviar SMS a través de la aplicación del sistema y la integración con proveedores de SMS en la nube (Twilio, Nexmo/Vonage) a través de HTTP API. También discutiremos las limitaciones y las mejores prácticas.
1. Envío de SMS a través de MessageUI (solo iOS)
El framework MessageUI proporciona el controlador MFMessageComposeViewController, que permite enviar un SMS desde tu aplicación utilizando la interfaz estándar de iOS. Importante: este método solo funciona en dispositivos reales (no en el simulador) y requiere una tarjeta SIM activa.
Paso 1: Importar el framework
Añade la importación en el archivo donde trabajarás con SMS:
import MessageUIPaso 2: Verificar la posibilidad de envío
Antes de llamar al controlador, asegúrate de verificar si el dispositivo puede enviar SMS:
if MFMessageComposeViewController.canSendText() { // se puede enviar} else { // mostrar error al usuario}Paso 3: Crear y configurar el controlador
let messageVC = MFMessageComposeViewController()messageVC.body = "Su código de confirmación: 123456"messageVC.recipients = ["+79001234567"]messageVC.messageComposeDelegate = self // no olvide establecer el delegadopresent(messageVC, animated: true, completion: nil)Paso 4: Implementar el delegado
extension YourViewController: MFMessageComposeViewControllerDelegate { func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { controller.dismiss(animated: true) { switch result { case .sent: print("SMS enviado") case .cancelled: print("Cancelado") case .failed: print("Error de envío") @unknown default: break } } }}Limitaciones:
- No funciona en el simulador.
- El usuario ve la interfaz y puede modificar el mensaje.
- No es adecuado para envío automático (por ejemplo, en la parte del servidor).
- No está disponible en macOS (solo iOS).
2. Envío de SMS a través de API de terceros (Twilio, Nexmo y otros)
Para el envío de SMS desde el servidor (sin intervención del usuario), utilice las HTTP API de los proveedores en la nube. Veamos un ejemplo con Twilio, uno de los servicios más populares.
Paso 1: Obtener credenciales
Regístrese en Twilio, obtenga el Account SID, el Auth Token y el número de teléfono del remitente (por ejemplo, +15005550006 para pruebas).
Paso 2: Enviar una solicitud POST
Utilice URLSession para llamar a la API de Twilio:
func sendSMSviaTwilio(to recipient: String, message: String) { let accountSID = "YOUR_ACCOUNT_SID" let authToken = "YOUR_AUTH_TOKEN" let fromNumber = "+15005550006" 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)" let loginData = loginString.data(using: .utf8)! let base64LoginString = loginData.base64EncodedString() request.setValue("Basic \\(base64LoginString)", forHTTPHeaderField: "Authorization") let bodyParams = [ "From": fromNumber, "To": recipient, "Body": message ] le También en la biblioteca
Contenedor de Inyección de Dependencias en C++: biblioteca Fruit para la inyección de dependencias
Procesamiento de JSON en Kotlin: bibliotecas, análisis y serialización
Java para geolocalización y mapas: bibliotecas, API y ejemplos
Trabajo con XML en Java: DOM, SAX, StAX y JAXB