SMS-Versand mit Swift (iOS/macOS): MessageUI-API und Drittanbieterdienste

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

SMS-Versand mit Swift (iOS/macOS): API und Bibliotheken



Bei der Entwicklung für iOS und macOS besteht häufig die Notwendigkeit, SMS-Nachrichten zu versenden – zur Benutzerverifizierung, zum Senden von Benachrichtigungen oder zur Integration in CRM-Systeme. In diesem Artikel betrachten wir zwei grundlegende Ansätze: die Verwendung des integrierten Frameworks MessageUI zum Versenden von SMS über die System-App und die Integration mit Cloud-SMS-Anbietern (Twilio, Nexmo/Vonage) über die HTTP-API. Wir besprechen auch Einschränkungen und bewährte Verfahren.



1. SMS-Versand über MessageUI (nur iOS)



Das Framework MessageUI stellt den Controller MFMessageComposeViewController bereit, mit dem Sie SMS aus Ihrer App über die Standard-iOS-Oberfläche senden können. Wichtig: Diese Methode funktioniert nur auf echten Geräten (nicht im Simulator) und erfordert eine aktive SIM-Karte.



Schritt 1: Framework einbinden

Fügen Sie den Import in die Datei ein, in der Sie mit SMS arbeiten:

import MessageUI


Schritt 2: Überprüfung der Sendemöglichkeit

Prüfen Sie vor dem Aufruf des Controllers unbedingt, ob das Gerät SMS senden kann:

if MFMessageComposeViewController.canSendText() {    // Senden möglich} else {    // Fehler dem Benutzer anzeigen}


Schritt 3: Controller erstellen und konfigurieren

let messageVC = MFMessageComposeViewController()messageVC.body = "Ihr Bestätigungscode: 123456"messageVC.recipients = ["+79001234567"]messageVC.messageComposeDelegate = self // Delegaten nicht vergessenpresent(messageVC, animated: true, completion: nil)


Schritt 4: Delegaten implementieren

extension YourViewController: MFMessageComposeViewControllerDelegate {    func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {        controller.dismiss(animated: true) {            switch result {            case .sent:                print("SMS gesendet")            case .cancelled:                print("Abgebrochen")            case .failed:                print("Sendefehler")            @unknown default:                break            }        }    }}


Einschränkungen:

  • Funktioniert nicht im Simulator.
  • Der Benutzer sieht die Oberfläche und kann die Nachricht ändern.
  • Nicht geeignet für automatischen Versand (z. B. serverseitig).
  • Nicht auf macOS verfügbar (nur iOS).


2. SMS-Versand über Drittanbieter-APIs (Twilio, Nexmo u. a.)



Für den serverseitigen SMS-Versand (ohne Benutzereingriff) verwenden Sie die HTTP-API von Cloud-Anbietern. Betrachten wir ein Beispiel mit Twilio – einem der beliebtesten Dienste.



Schritt 1: Anmeldedaten abrufen

Registrieren Sie sich bei Twilio, erhalten Sie Account SID, Auth Token und die Telefonnummer des Absenders (z. B. +15005550006 für Tests).



Schritt 2: POST-Anfrage senden

Verwenden Sie URLSession zum Aufruf der Twilio-API:

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                    

Empfehlungen