Ako naplánovať SMS v Kotline
Najjednoduchší spôsob odosielania SMS z Kotlinu je použiť vstavanú HTTP/Rest SMS API Ozeki SMS Gateway. Keď použijete toto API, budete odosielať SMS správy vydaním HTTP POST požiadavky na SMS bránu. HTTP POST požiadavka bude obsahovať správu formátovanú v json formáte. SMS brána odošle túto SMS príjemcovi a vráti HTTP 200 OK odpoveď na vašu požiadavku. (Obrázok 1)
Kotlin kód na odoslanie naplánovanej SMS na mobil
Ukážka kódu Kotlin na odoslanie SMS nižšie demonštruje, ako môžete odoslať naplánovanú SMS pomocou http rest SMS API Ozeki SMS Gateway s použitím knižnice Kotlin Ozeki.Libs.Rest. Táto knižnica je poskytovaná bezplatne a môžete ju použiť a upraviť v akomkoľvek z vašich projektov.
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="Odoslať" 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="Na adresu:" 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="Správa:" 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="Čas odoslania:" 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="Ahoj svet!" 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="Logy:" 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>
Ako použiť príklad Kotlin SMS:
Môžete použiť triedu Message na vytvorenie SMS a môžete použiť triedu MessageApi na odoslanie naplánovanej SMS do SMS brány. SMS brána prepošle vašu správu do mobilnej siete buď prostredníctvom bezdrôtového pripojenia alebo prostredníctvom internetu.
Stiahnuť SendScheduledSms.kt
Zdrojový kód vysvetlený v tomto článku je možné stiahnuť, používať a upravovať bezplatne.
Stiahnuť: SendScheduledSms.kt.zip (149Kb)
Čo obsahuje súbor SendScheduledSms.kt.zip?
Súbor SendScheduledSms.kt.zip obsahuje príklad projektu, ktorý má v sebe knižnicu Ozeki.Libs.Rest. S touto knižnicou môžete odosielať, mazať, označovať a prijímať SMS správy vytvorením MessageApi a použitím metód Send(), Delete(), Mark() a Receive(). (Obrázok 2)
Ako odoslať naplánovanú SMS z Kotlin (Rýchle kroky)
Na odoslanie naplánovanej SMS z Kotlin:
- Nainštalujte Ozeki SMS Gateway
- Pripojte Ozeki SMS Gateway k mobilnej sieti
- Odošlite testovaciu SMS z Ozeki GUI
- Vytvorte HTTP SMS API používateľa
- Android Studio
- Stiahnite si vyššie uvedený príklad projektu
- Vytvorte SMS vytvorením nového objektu Message
- Vytvorte API na odoslanie vašej naplánovanej správy
- Použite metódu Send na odoslanie vašej naplánovanej správy
- Prečítajte si odpoveď na konzole
- Skontrolujte záznamy v SMS gatewey
Nainštalujte Ozeki SMS Gateway a vytvorte HTTP API používateľa
Na odosielanie SMS z Kotlin je potrebné najprv nainštalovať Ozeki SMS Gateway. SMS gateway je možné nainštalovať na rovnakom počítači, kde vyvíjate svoj Kotlin kód v Android Studio. Po inštalácii je ďalším krokom pripojenie Ozeki SMS Gateway k mobilnej sieti. Môžete odoslať testovaciu SMS z Ozeki GUI na overenie, že vaše pripojenie k mobilnej sieti funguje. Posledným krokom na prípravu vášho prostredia je vytvorenie HTTP SMS API používateľa. Vytvorte používateľa s menom "http_user" a heslom "qwe123", aby príklad fungoval bez úprav.
Po nastavení prostredia môžete spustiť svoj Kotlin kód.
HTTP API URL na odosielanie SMS z Kotlin
Na odoslanie naplánovanej SMS z Kotlin musí váš Kotlin kód odoslať HTTP požiadavku na SMS gateway. API URL je uvedené nižšie. Upozorňujeme, že IP adresa (127.0.0.1) by mala byť nahradená IP adresou vášho SMS gateway. Ak je Ozeki SMS Gateway nainštalovaný na rovnakom počítači, kde beží JavaScriptová SMS aplikácia, môže to byť 127.0.0.1. Ak je nainštalovaný na inom počítači, mala by to byť IP adresa toho počítača.
http://127.0.0.1:9509/api?action=rest
HTTP autentifikácia na odoslanie naplánovanej SMS z Kotlin
Na autentifikáciu Kotlin SMS klienta je potrebné odoslať používateľské meno a heslo v base64 kódovanom reťazci na server v HTTP požiadavke. Používa sa formát: base64(používateľské meno+":"+heslo). V Kotlin môžete na toto kódovanie použiť nasledujúci kód:
var usernamePassword = "%s:%s".format(username, password) return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
Napríklad, ak zakódujete používateľské meno 'http_user' a heslo 'qwe123', dostanete nasledujúci base64 kódovaný reťazec: aHR0cF91c2VyOnF3ZTEyMw==. Na odoslanie
Hlavička HTTP požiadavky na odoslanie SMS z Kotlin
Na odoslanie SMS správ je potrebné zahrnúť nasledujúce riadky ako hlavičky do HTTP požiadavky. Upozorňujeme, že obsahujeme hlavičku Content-Type a Authorization.
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
HTTP požiadavka na odoslanie SMS z Kotlin
Na odoslanie SMS vaša Kotlin aplikácia odošle HTTP požiadavku podobnú nižšie uvedenej. Upozorňujeme, že táto požiadavka obsahuje časť HTTP hlavičky a časť HTTP tela. HTTP telo je JSON kódovaný dátový reťazec. Obsahuje číslo príjemcu a text správy.
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": "Hello world!", "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 } ] }
HTTP odpoveď prijatá príkladom Kotlin SMS
Keď SMS brána prijme túto požiadavku, vygeneruje HTTP odpoveď. HTTP odpoveď bude obsahovať stavový kód, ktorý indikuje, či bola odosielacia požiadavka SMS úspešná alebo nie. Taktiež vráti štruktúru zakódovanú v JSON, ktorá poskytne užitočné informácie o odoslaní správy.
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": "Messages queued for delivery.", "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": "Hello world!", "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": "Type", "value": "SMS:TEXT" } ], "status": "SUCCESS" } ] } }
Toto video vám ukáže, ako stiahnuť a použiť projekt SendScheduledSms.kt. Keď otvoríte príkladový projekt, môžete si všimnúť, že existuje balík s názvom Ozeki.Libs.Rest. Tento balík obsahuje MessageApi a všetko potrebné na odoslanie naplánovanej SMS pomocou Kotlinu.
Ako skontrolovať, že SMS bola prijatá HTTP používateľom
Po odoslaní SMS je dobré skontrolovať vašu SMS bránu, aby ste videli, čo prijala. Log môžete skontrolovať otvorením detailov HTTP používateľa v konzole na správu Ozeki SMS brány. Na konci vyššie uvedeného videa môžete vidieť, ako skontrolovať, či bola požiadavka prijatá http_user.
Na obrázku 4 môžete vidieť používateľské rozhranie aplikácie na telefóne. Ako vidno na obrázkoch pred a po, odosielanie naplánovaných SMS je s touto aplikáciou veľmi jednoduché. Po odoslaní správy bude log procesu odosielania viditeľný pod textovým poľom 'Čas odoslania'. Tu môžete získať všetky informácie o odoslanej správe.
Knižnicu Ozeki.Libs.Rest môžete stiahnuť, používať a upravovať bezplatne.
Stiahnuť: Ozeki.Libs.Rest.kt.zip (7.66Kb)
Ak sa rozhodnete vytvoriť svoju aplikáciu sami len s knižnicou Ozeki.Libs.Rest,
musíte vo svojej základnej aplikácii zmeniť niekoľko vecí.
Ak chcete použiť knižnicu Ozeki.Libs.Rest, musíte ju umiestniť do priečinka java
hlavného adresára
V nasledujúcom videu vám ukážem, ako stiahnuť a pridať knižnicu Ozeki.Libs.Rest
do vášho vlastného projektu.
Závislosti
Je dôležité spomenúť, že knižnica Ozeki.Libs.Rest má niektoré závislosti. Aby ste ju mohli používať, musíte tieto závislosti pridať do Gradle Scripts.
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'
Pridanie závislostí do projektu (Video tutoriál)
V nasledujúcom videu sa naučíte, ako pridať vyššie spomenuté závislosti. Začne sa kopírovaním kódu a prevedie vás až k úspešne pripojeným závislostiam. Video je dlhé len 53 sekúnd, ale obsahuje všetky potrebné kroky na dokončenie procesu. Tento tutoriál môžete sledovať bez akéhokoľvek úsilia.
Prístup k internetu
Aby vaša aplikácia mohla odosielať HTTP požiadavky, musíte jej umožniť pripojenie k internetu.
V nasledujúcom videu vám ukážem, ako povoliť prístup k internetu pre vašu Kotlin aplikáciu.
<uses-permission android:name="android.permission.INTERNET" />
android:usesCleartextTraffic="true"
Musíte pridať oba tieto riadky do súboru AndroidManifest.xml. V nasledujúcom videu vám ukážem, kam by ste mali vložiť vyššie uvedené kódy. Musíte pridať oba tieto riadky do súboru AndroidManifest.xml. V nasledujúcom videu vám ukážem, kam by ste mali vložiť vyššie uvedené kódy. Video začne kopírovaním a vložením kódu a prevedie vás k úspešne pridanému internetovému pripojeniu. Toto video je podrobné a ponúka jednoduché sledovanie.
Zhrnutie
Tento sprievodca vám ukazuje kroky naplánovania SMS v Kotline pomocou HTTP používateľa Ozeki SMS Gateway. Naplánovanie SMS na doručenie správ v čase, keď majú vaši zákazníci čas ich prečítať, vám skutočne pomáha udržiavať dobrý vzťah s nimi. Starostlivosť o malé veci, ako je nájdenie perfektného načasovania na zdieľanie myšlienok a informácií, je nevyhnutná, ak chcete ukázať, ako profesionálny je váš podnik.
Pokračujte v čítaní tutoriálov ako je tento na webovej stránke Ozeki. Nájdete tam viac informácií o používaní Kotlinu na prácu so SMS správami, ďalej sa naučte Ako prijímať SMS v Kotline.
Stiahnite si Ozeki SMS Gateway teraz a použite to, čo ste sa naučili!
More information
- Kotlin send SMS with the HTTP rest API (code sample)
- Kotlin send multiple SMS with the HTTP rest API (code sample)
- Kotlin schedule SMS with the HTTP rest API (code sample)
- Kotlin receive SMS with the HTTP rest API (code sample)
- Kotlin delete SMS with the HTTP rest API (code sample)
- Github: Kotlin SMS API