Envio de SMS em Swift (iOS/macOS): API MessageUI e serviços de terceiros

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): 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 MessageUI


Passo 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                    

Recommendations