Envoi de SMS en Swift (iOS/macOS) : API MessageUI et services tiers

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Envoi de SMS en Swift (iOS/macOS) : API et bibliothèques



Dans le développement iOS et macOS, il est souvent nécessaire d'envoyer des SMS — pour la vérification des utilisateurs, l'envoi de notifications ou l'intégration avec un CRM. Dans cet article, nous examinerons deux approches principales : l'utilisation du framework intégré MessageUI pour envoyer des SMS via l'application système, et l'intégration avec des fournisseurs de SMS cloud (Twilio, Nexmo/Vonage) via l'API HTTP. Nous discuterons également des limitations et des meilleures pratiques.



1. Envoi de SMS via MessageUI (iOS uniquement)



Le framework MessageUI fournit le contrôleur MFMessageComposeViewController, qui permet d'envoyer un SMS depuis votre application en utilisant l'interface standard d'iOS. Important : cette méthode fonctionne uniquement sur des appareils réels (pas sur le simulateur) et nécessite une carte SIM active.



Étape 1 : Importation du framework

Ajoutez l'import dans le fichier où vous travaillerez avec les SMS :

import MessageUI


Étape 2 : Vérification de la possibilité d'envoi

Avant d'appeler le contrôleur, vérifiez impérativement si l'appareil peut envoyer des SMS :

if MFMessageComposeViewController.canSendText() {    // peut envoyer} else {    // afficher une erreur à l'utilisateur}


Étape 3 : Création et configuration du contrôleur

let messageVC = MFMessageComposeViewController()messageVC.body = "Votre code de confirmation : 123456"messageVC.recipients = ["+79001234567"]messageVC.messageComposeDelegate = self // n'oubliez pas de définir le déléguépresent(messageVC, animated: true, completion: nil)


Étape 4 : Implémentation du délégué

extension YourViewController: MFMessageComposeViewControllerDelegate {    func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {        controller.dismiss(animated: true) {            switch result {            case .sent:                print("SMS envoyé")            case .cancelled:                print("Annulé")            case .failed:                print("Erreur d'envoi")            @unknown default:                break            }        }    }}


Limitations :

  • Ne fonctionne pas sur le simulateur.
  • L'utilisateur voit l'interface et peut modifier le message.
  • Ne convient pas pour l'envoi automatique (par exemple, côté serveur).
  • Indisponible sur macOS (iOS uniquement).


2. Envoi de SMS via des API tierces (Twilio, Nexmo, etc.)



Pour l'envoi de SMS côté serveur (sans intervention de l'utilisateur), utilisez l'API HTTP des fournisseurs cloud. Prenons l'exemple de Twilio — l'un des services les plus populaires.



Étape 1 : Obtention des identifiants

Inscrivez-vous sur Twilio, obtenez votre Account SID, Auth Token et le numéro de téléphone de l'expéditeur (par exemple, +15005550006 pour les tests).



Étape 2 : Envoi d'une requête POST

Utilisez URLSession pour appeler l'API 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