Wie man eine SMS in Kotlin plant
Der einfachste Weg, SMS von Kotlin aus zu versenden, ist die Verwendung der integrierten HTTP/Rest-SMS-API des Ozeki SMS Gateways. Wenn Sie diese API verwenden, senden Sie SMS-Nachrichten, indem Sie eine HTTP-Post-Anfrage an das SMS-Gateway stellen. Die HTTP-Post-Anfrage wird eine im JSON-Format formatierte Nachricht enthalten. Das SMS-Gateway wird diese SMS an das Empfängertelefon senden und eine HTTP-200-OK-Antwort auf Ihre Anfrage zurückgeben. (Abbildung 1)
Das folgende Kotlin-SMS-Codebeispiel zeigt, wie Sie eine geplante SMS mit der HTTP-REST-SMS-API des Ozeki SMS Gateway unter Verwendung der Kotlin Ozeki.Libs.Rest-Bibliothek senden können. Diese Bibliothek wird Ihnen kostenlos zur Verfügung gestellt, und Sie können sie in Ihren Projekten verwenden und modifizieren.
MainActivity.kt
package send.scheduledsms import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import Ozeki.Libs.Rest.Configuration import Ozeki.Libs.Rest.MessageApi import Ozeki.Libs.Rest.Message import android.text.method.ScrollingMovementMethod import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val inputToAddress:android.widget.EditText = findViewById(R.id.inputToAddress) val inputMessage:android.widget.EditText = findViewById(R.id.inputMessage) val date:android.widget.EditText = findViewById(R.id.inputTimeToSendDate) val time:android.widget.EditText = findViewById(R.id.inputTimeToSendTime) val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest) val logBox:android.widget.TextView = findViewById(R.id.logBox) logBox.movementMethod = ScrollingMovementMethod() val configuration = Configuration( username = "http_user", password = "qwe123", apiurl = "http://10.0.2.2:9509/api" ) val api = MessageApi(configuration) btnSendRequest.setOnClickListener { if (inputToAddress.text.toString() != "" && inputMessage.text.toString() != "" && date.text.toString() != "" && time.text.toString() != "") { val datetime = String.format("%s %s", date.text.toString(), time.text.toString()) val msg = Message() msg.ToAddress = inputToAddress.text.toString() msg.Text = inputMessage.text.toString() msg.TimeToSend = datetime GlobalScope.launch(Dispatchers.IO) { val response = api.Send(msg) logBox.text = String.format("%s\n%s", logBox.text, response.toString()) } inputToAddress.text.clear() inputMessage.text.clear() date.text.clear() time.text.clear() } } } }
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btnSendRequest" android:layout_width="320dp" android:layout_height="50dp" android:layout_marginTop="36dp" android:text="Senden" android:backgroundTint="#FF3F3F" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/logBox" /> <TextView android:id="@+id/textToAddress" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="36dp" android:text="An Adresse:" android:textSize="20sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/textMessage" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Nachricht:" android:textSize="20sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/inputToAddress" /> <TextView android:id="@+id/textWhen" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="Sendezeitpunkt:" android:textSize="20sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/inputMessage" /> <EditText android:id="@+id/inputToAddress" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:ems="10" android:hint="+36201111111" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textToAddress" /> <EditText android:id="@+id/inputMessage" android:layout_width="320dp" android:layout_height="100dp" android:layout_marginTop="20dp" android:ems="10" android:gravity="start|top" android:hint="Hallo Welt!" android:inputType="textMultiLine" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textMessage" /> <EditText android:id="@+id/inputTimeToSendTime" android:layout_width="120dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginEnd="44dp" android:ems="10" android:hint="15:30:00" android:inputType="time" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/textWhen" /> <TextView android:id="@+id/logBox" android:layout_width="320dp" android:layout_height="80dp" android:layout_marginTop="20dp" android:scrollbars="vertical" android:text="Protokolle:" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/inputTimeToSendTime" /> <EditText android:id="@+id/inputTimeToSendDate" android:layout_width="180dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:layout_marginEnd="24dp" android:ems="10" android:hint="2021-06-16" android:inputType="date" app:layout_constraintEnd_toStartOf="@+id/inputTimeToSendTime" app:layout_constraintHorizontal_bias="1.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textWhen" /> </androidx.constraintlayout.widget.ConstraintLayout>
So verwenden Sie das Kotlin-SMS-Beispiel:
Sie können die Message-Klasse verwenden, um die SMS zu erstellen, und die MessageApi-Klasse, um die geplante SMS an das SMS-Gateway zu senden. Das SMS-Gateway leitet Ihre Nachricht entweder über eine drahtlose Verbindung oder über das Internet an das Mobilfunknetz weiter.
Download SendScheduledSms.kt
Der in diesem Artikel erklärte Quellcode kann kostenlos heruntergeladen, verwendet und modifiziert werden.
Download: SendScheduledSms.kt.zip (149Kb)
Was befindet sich in der SendScheduledSms.kt.zip-Datei?
Die SendScheduledSms.kt.zip-Datei enthält ein Beispielprojekt, das die Ozeki.Libs.Rest-Bibliothek beinhaltet. Mit dieser Bibliothek können Sie SMS-Nachrichten senden, löschen, markieren und empfangen, indem Sie eine MessageApi erstellen und die Methoden Send(), Delete(), Mark() und Receive() verwenden. (Abbildung 2)
Wie sendet man eine geplante SMS mit Kotlin (Kurzanleitung)
So senden Sie eine geplante SMS mit Kotlin:
- Installieren Sie Ozeki SMS Gateway
- Verbinden Sie Ozeki SMS Gateway mit dem Mobilfunknetz
- Senden Sie eine Test-SMS über die Ozeki GUI
- Erstellen Sie einen HTTP-SMS-API-Benutzer
- Android Studio
- Laden Sie das oben genannte Beispielprojekt herunter
- Erstellen Sie die SMS, indem Sie ein neues Message-Objekt erstellen
- Erstellen Sie eine API zum Senden Ihrer geplanten Nachricht
- Verwenden Sie die Send-Methode, um Ihre geplante Nachricht zu senden
- Lesen Sie die Antwortnachricht in der Konsole
- Überprüfen Sie die Protokolle im SMS-Gateway
Installieren Sie Ozeki SMS Gateway und erstellen Sie einen HTTP-API-Benutzer
Um SMS mit Kotlin senden zu können, müssen Sie zunächst Ozeki SMS Gateway installieren. Das SMS-Gateway kann auf demselben Computer installiert werden, auf dem Sie Ihren Kotlin-Code in Android Studio entwickeln. Nach der Installation ist der nächste Schritt, Ozeki SMS Gateway mit dem Mobilfunknetz zu verbinden. Sie können eine Test-SMS über die Ozeki GUI senden, um zu überprüfen, ob Ihre Mobilfunknetzverbindung funktioniert. Der letzte Schritt zur Vorbereitung Ihrer Umgebung ist das Erstellen eines HTTP-SMS-API-Benutzerkontos. Erstellen Sie einen Benutzer mit dem Benutzernamen "http_user" und dem Passwort "qwe123", damit das Beispiel ohne Änderungen funktioniert.
Nachdem die Umgebung eingerichtet ist, können Sie Ihren Kotlin-Code ausführen.
HTTP-API-URL zum Senden von SMS mit Kotlin
Um eine geplante SMS mit Kotlin zu senden, muss Ihr Kotlin-Code eine HTTP-Anfrage an das SMS-Gateway senden. Die API-URL wird unten angezeigt. Beachten Sie, dass die IP-Adresse (127.0.0.1) durch die IP-Adresse Ihres SMS-Gateways ersetzt werden sollte. Wenn Ozeki SMS Gateway auf demselben Computer installiert ist, auf dem die JavaScript-SMS-Anwendung läuft, kann dies 127.0.0.1 sein. Wenn es auf einem anderen Computer installiert ist, sollte es die IP-Adresse dieses Computers sein.
http://127.0.0.1:9509/api?action=rest
HTTP-Authentifizierung zum Senden einer geplanten SMS mit Kotlin
Um den Kotlin-SMS-Client zu authentifizieren, müssen Sie den Benutzernamen und das Passwort in einer base64-kodierten Zeichenkette an den Server in einer HTTP-Anfrage senden. Das verwendete Format lautet: base64(Benutzername+":"+Passwort). In Kotlin können Sie den folgenden Code verwenden, um diese Kodierung durchzuführen:
var usernamePassword = "%s:%s".format(username, password) return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
Wenn Sie beispielsweise den Benutzernamen 'http_user' und das Passwort 'qwe123' kodieren, erhalten Sie die folgende base64-kodierte Zeichenkette: aHR0cF91c2VyOnF3ZTEyMw==. Zum Senden
HTTP-Anfrageheader zum Senden von SMS mit Kotlin
Um die SMS-Nachrichten zu senden, müssen Sie die folgenden Zeilen als Header in die HTTP-Anfrage aufnehmen. Beachten Sie, dass wir einen Content-Type-Header und einen Authorization-Header einfügen.
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
HTTP-Anfrage zum Senden von SMS mit Kotlin
Um die SMS zu übermitteln, sendet Ihre Kotlin-Anwendung eine HTTP-Anfrage ähnlich der unten gezeigten. Beachten Sie, dass diese Anfrage einen HTTP-Header-Teil und einen HTTP-Body-Teil enthält. Der HTTP-Body ist eine JSON-kodierte Datenzeichenkette. Sie enthält die Empfängernummer und den Text der Nachricht.
POST /api?action=sendmsg HTTP/1.1 Connection: Keep-Alive Content-Length: 320 Content-Type: application/json; charset=utf-8 Accept-Encoding: gzip Authorization: Basic aHR0cF91c2VyOnF3ZTEyMw== Host: 10.0.2.2:9509 User-Agent: okhttp/4.2.2 { "messages": [ { "message_id": "e68f8e11-dce2-48e2-a2c5-1d2efa98272a", "to_address": "+36201111111", "text": "Hallo Welt!", "create_date": "2021-06-17T15:04:03", "valid_until": "2021-06-24T15:04:03", "time_to_send": "2021-06-17 15:10:00", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": true } ] }
Sobald das SMS-Gateway diese Anfrage erhält, wird es eine HTTP-Antwort generieren. Die HTTP-Antwort enthält einen Statuscode, der anzeigt, ob die SMS-Sendeanfrage erfolgreich war oder nicht. Es wird auch eine JSON-kodierte Struktur zurückgegeben, die Ihnen nützliche Details über die Übermittlung der Nachricht liefert.
HTTP/1.1 200 OK User-Agent: OZEKI 10.3.120 (www.myozeki.com) Content-Type: application/json; charset=utf8 Last-Modified: Thu, 17 Jun 2021 14:56:26 GMT Server: 10/10.3.120 Transfer-Encoding: chunked { "http_code": 200, "response_code": "SUCCESS", "response_msg": "Nachrichten wurden zur Zustellung in die Warteschlange gestellt.", "data": { "total_count": 1, "success_count": 1, "failed_count": 0, "messages": [ { "message_id": "e68f8e11-dce2-48e2-a2c5-1d2efa98272a", "from_station": "%", "to_address": "+36201111111", "to_station": "%", "text": "Hallo Welt!", "create_date": "2021-06-17 15:04:03", "valid_until": "2021-06-24 15:04:03", "time_to_send": "2021-06-17 15:10:00", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": false, "tags": [ { "name": "Typ", "value": "SMS:TEXT" } ], "status": "SUCCESS" } ] } }
Wie man eine geplante SMS von Kotlin aus mit der SMS-API und dem obigen Beispielprojekt sendet (Video-Tutorial)
Dieses Video zeigt Ihnen, wie Sie das SendScheduledSms.kt-Projekt herunterladen und verwenden. Sobald Sie das Beispielprojekt geöffnet haben, werden Sie vielleicht bemerken, dass es ein Paket namens Ozeki.Libs.Rest gibt. Dies ist das Paket, das die MessageApi und alles, was Sie benötigen, enthält, um eine geplante SMS mit Kotlin zu senden.
Wie man überprüft, ob die SMS vom HTTP-Benutzer akzeptiert wurde
Nachdem die SMS übermittelt wurde, ist es eine gute Idee, Ihr SMS-Gateway zu überprüfen, um zu sehen, was es erhalten hat. Sie können das Protokoll einsehen, indem Sie die Details des HTTP-Benutzers aus der Ozeki SMS Gateway Management-Konsole öffnen. Am Ende des obigen Videos können Sie sehen, wie Sie überprüfen können, ob die Anfrage vom http_user empfangen wurde.
Wie die App auf einem Telefon aussieht (Video-Tutorial)
In Abbildung 4 können Sie die Benutzeroberfläche der App auf einem Telefon sehen. Wie Sie auf den Vorher-Nachher-Bildern sehen können, ist das geplante SMS-Senden mit dieser App sehr einfach. Nachdem die Nachricht gesendet wurde, wird das Protokoll des Sendevorgangs unter dem Textfeld "Zeit zum Senden" sichtbar. Hier erhalten Sie alle Informationen über die gesendete Nachricht.
Wie man Ozeki.Libs.Rest zu Ihrem eigenen Projekt hinzufügt
Die Ozeki.Libs.Rest-Bibliothek kann kostenlos heruntergeladen, verwendet und modifiziert werden.
Download: Ozeki.Libs.Rest.kt.zip (7.66Kb)
Wenn Sie sich entscheiden, Ihre Anwendung nur mit der Ozeki.Libs.Rest-Bibliothek
selbst zu erstellen, gibt es einige Dinge, die Sie in Ihrer Basis-Anwendung ändern sollten.
Um die Ozeki.Libs.Rest-Bibliothek zu verwenden, müssen Sie sie in den Java-Ordner
des Hauptverzeichnisses legen
Im folgenden Video zeige ich Ihnen, wie Sie die Ozeki.Libs.Rest-Bibliothek
herunterladen und zu Ihrem eigenen Projekt hinzufügen.
Abhängigkeiten
Es ist wichtig zu erwähnen, dass die Ozeki.Libs.Rest-Bibliothek einige Abhängigkeiten hat. Um sie zu verwenden, müssen Sie diese Abhängigkeiten in die Gradle Scripts aufnehmen.
implementation "com.squareup.okhttp3:okhttp:4.2.2" implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
Internetzugang
Damit Ihre Anwendung eine HTTP-Anfrage senden kann, müssen Sie ihr den Zugriff auf das Internet ermöglichen.
Im folgenden Video zeige ich Ihnen, wie Sie den Internetzugang für Ihre Kotlin-Anwendung freischalten.
<uses-permission android:name="android.permission.INTERNET" />
android:usesCleartextTraffic="true"
Internetverbindung für Ihr Projekt freischalten (Video-Tutorial)
Sie müssen beide dieser Zeilen zur AndroidManifest.xml-Datei hinzufügen.
Im folgenden Video zeige ich Ihnen, wo Sie die oben genannten Codes einfügen sollten.
Sie müssen beide dieser Zeilen zur AndroidManifest.xml-Datei hinzufügen.
Im folgenden Video zeige ich Ihnen, wo Sie die oben genannten Codes einfügen sollten.
Das Video beginnt mit dem Kopieren und Einfügen des Codes und führt Sie bis zur erfolgreich eingerichteten Internetverbindung.
Dieses Video ist detailliert und leicht zu verfolgen.
Zusammenfassung
Diese Anleitung zeigt Ihnen die Schritte zum Planen von SMS in Kotlin mit der HTTP-Nutzung des Ozeki SMS Gateways. Das Planen von SMS, um Nachrichten zu versenden, wenn Ihre Kunden Zeit haben, sie zu lesen, hilft Ihnen, eine gute Beziehung zu ihnen aufrechtzuerhalten. Auf kleine Dinge wie den perfekten Zeitpunkt für das Teilen von Gedanken und Informationen zu achten, ist entscheidend, wenn Sie zeigen möchten, wie professionell Ihr Unternehmen ist.
Lesen Sie weiterhin Tutorials wie dieses auf der Ozeki-Webseite. Es gibt mehr Informationen zur Verwendung von Kotlin für den Umgang mit SMS-Nachrichten. Als nächstes lernen Sie Wie Sie eine SMS in Kotlin empfangen.
Laden Sie das Ozeki SMS Gateway jetzt herunter und setzen Sie das Gelernte um!
More information