
Teilen Sie:
Abdul ist ein Developer Advocate für Vonage. Er hat einen Hintergrund als iOS-Ingenieur im Bereich Verbraucherprodukte. In seiner Freizeit fährt er gerne Rad, hört Musik und berät diejenigen, die gerade ihre Reise in die Technologiebranche beginnen.
SMS-Nachrichten mit Swift, Vapor und Vonage versenden
Einführung
Die Vonage SMS API ermöglicht es Ihnen, Textnachrichten programmatisch zu versenden. In diesem Tutorial erfahren Sie, wie Sie die Vonage SMS API mit Vapor nutzen können, um eine SMS zu versenden.
Voraussetzungen
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
Xcode 12 und Swift 5 oder höher.
Die Vapor-Werkzeugkasten auf Ihrem Rechner installiert.
Ein Vapor-Projekt erstellen
Sie können ein Vapor-Projekt erstellen, indem Sie den Befehl new project vapor new SwiftTextMessage in Ihrem Terminal erstellen. Zuerst werden Sie gefragt, ob Sie Fluent verwenden möchten (drücken Sie n zum Überspringen) und dann, ob Sie Leaf verwenden wollen. Leaf ist eine Schablonensprache, mit der Sie dynamische HTML-Seiten erzeugen können, also drücken Sie y um sie einzubinden. Sobald der Befehl beendet ist, wechseln Sie in das Verzeichnis, das er für Sie erstellt hat, indem Sie cd SwiftTextMessage.
Sie müssen auch eine .env Datei erstellen, in der Sie die Anmeldedaten für Ihr Vonage API-Konto speichern. Verwenden Sie in Ihrem Terminal den folgenden Befehl, um die Datei zu erstellen, die X und Y durch Ihren API-Schlüssel bzw. Ihr Geheimnis:
Jetzt können Sie das Projekt in Xcode öffnen, indem Sie vapor xcode. Sobald Xcode geöffnet ist, beginnt es mit dem Herunterladen der Abhängigkeiten, auf die Vapor mit dem Swift Package Manager (SPM) angewiesen ist. Um die Abhängigkeiten zu sehen, können Sie die Package.swift Datei öffnen.
Standardmäßig führt Xcode Ihre Anwendung aus einem zufällig ausgewählten lokalen Verzeichnis aus. Da Sie lokale Ressourcen laden werden, müssen Sie ein eigenes Arbeitsverzeichnis festlegen. Gehen Sie zu Produkt > Schema > Schema bearbeiten... und setzen Sie das Arbeitsverzeichnis auf den Stammordner Ihres Projekts.
Setting custom working directory
Drücken Sie CMD+R zum Erstellen und Ausführen. Nach der Fertigstellung finden Sie Ihre Webseite unter localhost:8080.
Eine Webseite erstellen
Nachdem Ihr Projekt nun eingerichtet ist, erstellen Sie eine Schnittstelle zur Eingabe einer Telefonnummer und einer Nachricht für die SMS. Öffnen Sie die index.leaf Datei unter Ressourcen/Ansichten und aktualisieren Sie sie:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Send a text message</title>
</head>
<body>
<h1>Send a text message using the Vonage SMS API</h1>
#if(status):
<p> Status of the last SMS: #(status)</p>
#endif
<form action="/send" method="post">
<p>
<label>Phone number E.g. 447000000000</label><br>
<input type="text" name="to">
</p>
<p>
<label>Text message</label><br>
<textarea name="text"> </textarea>
</p>
<button type="submit">Send text</button>
</form>
</body>
</html>Der obige Code fügt ein Formular mit Eingaben für eine Telefonnummer und eine Nachricht hinzu, und sobald das Formular abgeschickt wurde, wird eine POST Anfrage an /send. Beachten Sie den Leaf-Block, der mit #if(status):. Er prüft, ob die Statusvariable einen Wert hat, und wenn sie gesetzt ist, fügt er die zusätzlichen Statusinformationen hinzu. Wenn Sie ihn erstellen und ausführen (CMD + R), sehen Sie jetzt Ihre aktualisierte Seite.
Erstellen Sie die Modellstrukturen
Ein Vorteil der Verwendung von Vapor ist, dass Sie sich auf die Typsicherheit der Swift-Sprache stützen können. Sie können Eingaben und Ausgaben für Ihren Server modellieren, die mit dem Codable Protokoll entsprechen; Vapor hat ein Protokoll namens Content für diese Zwecke.
Erstellen Sie eine Struktur namens Input die konform ist mit Content am Ende der Datei routes.swift Datei:
struct Input: Content {
let to: String
let text: String
let from = "SwiftText"
var apiKey: String?
var apiSecret: String?
private enum CodingKeys: String, CodingKey {
case to
case text
case from
case apiKey = "api_key"
case apiSecret = "api_secret"
}
}Die Vonage SMS API erwartet Felder in der Groß- und Kleinschreibung, daher haben die Strukturen das CodingKeys enum, um ihre Eigenschaftsnamen auf ihre Entsprechung in Großbuchstaben abzubilden. Unterhalb der Input struct eine weitere struct für die Antwort, die die SMS API erwartet:
struct Response: Content {
let messages: [Messages]
struct Messages: Content {
let status: String
}
} Senden Sie die SMS
Um die SMS zu versenden, müssen Sie einen Anruf an den /sms Endpunkt der Vonage SMS API. Dazu müssen Sie die /send Route definieren, die vom Webformular verwendet wird, die Formulardaten parsen und dann den Anruf tätigen. Beginnen Sie mit der Definition der neuen Route in der routes Funktion:
app.post("send") { req -> EventLoopFuture<View> in
var input = try req.content.decode(Input.self)
input.apiKey = Environment.get("APIKEY")
input.apiSecret = Environment.get("APISECRET")
}Dies verwendet den Formularkörper zur Erstellung einer Input struct, dann werden der API-Schlüssel und das Geheimnis aus der .env Datei hinzugefügt, da sie von der SMS API als Pflichtfelder benötigt werden. Als nächstes verwenden Sie Vapors Klienten-APIdie es Ihnen ermöglicht, externe HTTP-Aufrufe zu tätigen, um die SMS API aufzurufen. Fügen Sie den Aufruf zur Sende-Route hinzu:
app.post("send") { req -> EventLoopFuture<View> in
var input = try req.content.decode(Input.self)
input.apiKey = Environment.get("APIKEY")
input.apiSecret = Environment.get("APISECRET")
return req.client.post(URI(scheme: "https", host: "rest.nexmo.com", path: "/sms/json")) { req in
try req.content.encode(input, as: .json)
}.flatMap { response -> EventLoopFuture<View> in
let responseBody = try! response.content.decode(Response.self)
return req.view.render("index", ["status": responseBody.messages.first?.status == "0" ? "ok" : "error"])
}
}Der client.post Funktionsaufruf hat einen Rückgabetyp von EventLoopFuture<ClientResponse>. Er wird dann auf einen EventLoopFuture<View> Typ umgewandelt, der der erwartete Rückgabetyp der Route ist. Die Map-Funktion nimmt die SMS API-Antwort und erstellt eine Statusvariable für den View Renderer zur Verwendung in der index.leaf Datei zu verwenden.
Probieren Sie es aus
Erstellen Sie das Projekt und führen Sie es aus (CMD + R), öffnen Sie localhost:8080 in Ihrem Browser und geben Sie dann eine Telefonnummer und eine Nachricht ein.
Index page of the project
Mit einem Klick auf die senden klicken, werden die Daten an die zuvor definierte Route gesendet, die Vonage SMS API angerufen und anschließend die Ausgangsseite mit dem Status angezeigt.
Index page with ok status
Wie geht es weiter?
Sie finden das fertige Projekt auf GitHub.
Mit der SMS API können Sie noch mehr tun, z. B. prüfen, ob Ihr Server eine SMS erfolgreich zugestellt hat. Erfahren Sie mehr darüber auf unserer Entwicklerplattform.
Teilen Sie:
Abdul ist ein Developer Advocate für Vonage. Er hat einen Hintergrund als iOS-Ingenieur im Bereich Verbraucherprodukte. In seiner Freizeit fährt er gerne Rad, hört Musik und berät diejenigen, die gerade ihre Reise in die Technologiebranche beginnen.
