Envio de SMS em Swift (iOS/macOS): biblioteca MessageUI e alternativas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Envio de SMS em Swift (iOS/macOS): visão geral de bibliotecas e API



No desenvolvimento mobile moderno, a capacidade de enviar mensagens SMS continua sendo uma funcionalidade requisitada: desde a confirmação de número de telefone até notificações em massa. No ecossistema Apple (iOS/macOS) com a linguagem Swift, existem várias abordagens — desde o embutido MessageUI até a integração com provedores de SMS em nuvem. Neste artigo, analisaremos as principais bibliotecas e APIs, suas vantagens e limitações, além de fornecer exemplos práticos de código.



1. Biblioteca embutida MessageUI



A maneira mais simples é usar o framework MessageUI, disponível no iOS e macOS. Ele permite chamar a interface padrão de envio de SMS (através de MFMessageComposeViewController) sem conectar SDKs de terceiros.



Recursos:

  • Envio de SMS através do aplicativo do sistema "Mensagens".
  • Suporte a anexos (imagens, vídeos, contatos).
  • Não requer registro em provedor.


Limitações:

  • Funciona apenas em dispositivos físicos (não no simulador).
  • O usuário vê a interface e confirma o envio.
  • Não é adequado para envio automático (do servidor).


Exemplo de código em Swift (iOS):

import MessageUIimport UIKit

class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {

@IBAction func sendSMSTapped(_ sender: UIButton) { guard MFMessageComposeViewController.canSendText() else { print("Dispositivo não suporta envio de SMS") return } let messageVC = MFMessageComposeViewController() messageVC.body = "Olá! Este é um SMS de teste do Swift." messageVC.recipients = ["+55123456789"] 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 pelo usuário") case .failed: print("Erro no envio") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}


Para macOS, usa-se NSSharingService com o tipo .composeMessage, mas sua funcionalidade é limitada.



2. Twilio — API em nuvem para SMS



Twilio é um dos serviços mais populares para envio programático de SMS. A integração em um aplicativo Swift é feita através da REST API ou do cliente Swift oficial twilio-swift.



Vantagens:

  • Alta velocidade de entrega, suporte a mais de 100 países.
  • Possibilidade de envio sem intervenção do usuário (lógica do servidor).
  • Configurações flexíveis: remetente, modelos, webhooks.


Exemplo de envio via URLSession:

import Foundation

func sendSMSviaTwilio(to phoneNumber: String, message: String) { let accountSID = "YOUR_ACCOUNT_SID" let authToken = "YOUR_AUTH_TOKEN" let fromNumber = "+1234567890" // seu número 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)"

Recommendations