Envio de SMS em Swift (iOS/macOS): API e bibliotecas
No desenvolvimento para iOS e macOS, surge frequentemente a necessidade de enviar mensagens SMS — para verificação de usuários, envio de notificações ou integração com CRM. Neste artigo, abordaremos duas abordagens principais: o uso do framework nativo MessageUI para envio de SMS através do aplicativo do sistema e a integração com provedores de SMS em nuvem (Twilio, Nexmo/Vonage) via API HTTP. Também discutiremos limitações e melhores práticas.
1. Envio de SMS via MessageUI (apenas iOS)
O framework MessageUI fornece o controlador MFMessageComposeViewController, que permite enviar SMS do seu aplicativo usando a interface padrão do iOS. Importante: este método funciona apenas em dispositivos reais (não no simulador) e requer um chip SIM ativo.
Passo 1: Importar o framework
Adicione a importação no arquivo onde você trabalhará com SMS:
import MessageUIPasso 2: Verificar a possibilidade de envio
Antes de chamar o controlador, verifique se o dispositivo pode enviar SMS:
if MFMessageComposeViewController.canSendText() { // pode enviar} else { // mostrar erro ao usuário}Passo 3: Criar e configurar o controlador
let messageVC = MFMessageComposeViewController()messageVC.body = "Seu código de confirmação: 123456"messageVC.recipients = ["+79001234567"]messageVC.messageComposeDelegate = self // não esqueça de definir o delegatepresent(messageVC, animated: true, completion: nil)Passo 4: Implementar o delegate
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("Erro no envio") @unknown default: break } } }}Limitações:
- Não funciona no simulador.
- O usuário vê a interface e pode alterar a mensagem.
- Não é adequado para envio automático (ex.: parte do servidor).
- Não disponível no macOS (apenas iOS).
2. Envio de SMS via APIs de terceiros (Twilio, Nexmo e outros)
Para envio de SMS pelo servidor (sem intervenção do usuário), use APIs HTTP de provedores em nuvem. Vamos ver um exemplo com Twilio — um dos serviços mais populares.
Passo 1: Obter credenciais
Registre-se no Twilio, obtenha o Account SID, o Auth Token e o número de telefone do remetente (ex.: +15005550006 para testes).
Passo 2: Enviar requisição POST
Use URLSession para chamar a API do 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 Também na biblioteca
Hilt/Dagger para Kotlin: guia completo com exemplos
Validator para Go: guia completo com exemplos práticos
Trabalhando com YAML em Node.js: bibliotecas js-yaml e yaml
GraphQL em C# (.NET): bibliotecas Hot Chocolate e GraphQL.NET para criação de APIs