Ako poslať viacero SMS z Kotlinu
Najjednoduchší spôsob, ako poslať SMS z Kotlinu, je použiť vstavanú HTTP/Rest SMS API Ozeki SMS Gateway. Keď použijete toto rozhranie, budete posielať SMS správy vydaním HTTP POST požiadavky na SMS bránu. HTTP POST požiadavka bude obsahovať správu vo formáte JSON. SMS brána túto správu odošle na príjemcove telefónne číslo a vráti odpoveď HTTP 200 OK na vašu požiadavku. (Obrázok 1)
Kotlin kód na odoslanie viacerých SMS na mobil
Ukážka kódu Kotlin na odosielanie SMS nižšie demonštruje, ako môžete odoslať viacero 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.multiple.sms import Ozeki.Libs.Rest.Configuration import Ozeki.Libs.Rest.Message import Ozeki.Libs.Rest.MessageApi import android.os.Bundle import android.text.method.ScrollingMovementMethod import android.widget.ArrayAdapter import androidx.appcompat.app.AppCompatActivity 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 btnAddMessage:android.widget.Button = findViewById(R.id.btnAddMessage) val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest) val listOfMessages:android.widget.ListView = findViewById(R.id.listView) 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) val messages : ArrayList<Message> = arrayListOf() val messages_label : ArrayList<String> = arrayListOf() val arrayAdapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, messages_label) listOfMessages.adapter = arrayAdapter btnAddMessage.setOnClickListener { if (inputToAddress.text.toString() != "" && inputMessage.text.toString() != "" ) { val msg = Message() msg.ToAddress = inputToAddress.text.toString() msg.Text = inputMessage.text.toString() inputToAddress.text.clear() inputMessage.text.clear() messages_label.add(msg.toString()) arrayAdapter.notifyDataSetChanged() messages.add(msg) } else { logBox.text = String.format("%s\nMusíte vyplniť všetky polia!", logBox.text) } } btnSendRequest.setOnClickListener { messages_label.clear() arrayAdapter.notifyDataSetChanged() GlobalScope.launch(Dispatchers.IO) { val response = api.Send(messages) messages.clear() logBox.text = String.format("%s\n%s", logBox.text, response.toString()) } } } }
<?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"> <TextView android:id="@+id/textToAddress" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:text="Adresa príjemcu:" 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/textMsg" 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" /> <EditText android:id="@+id/inputToAddress" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:ems="10" 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="80dp" android:layout_marginTop="20dp" android:ems="10" android:gravity="start|top" android:inputType="textMultiLine" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textMsg" /> <Button android:id="@+id/btnSendRequest" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="Odoslať" android:backgroundTint="#FF3F3F" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/listView" /> <Button android:id="@+id/btnAddMessage" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:backgroundTint="#FF3F3F" android:text="Pridať" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/inputMessage" /> <ListView android:id="@+id/listView" android:layout_width="320dp" android:layout_height="120dp" android:layout_marginTop="20dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/btnAddMessage" /> <TextView android:id="@+id/logBox" android:layout_width="320dp" android:layout_height="80dp" android:layout_marginTop="20dp" android:nestedScrollingEnabled="false" android:scrollbars="vertical" android:text="Logy:" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/btnSendRequest" /> </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 SMS správ do SMS brány. SMS brána prepošle vašu správu do mobilnej siete buď prostredníctvom bezdrôtového pripojenia alebo cez internet.
Stiahnuť SendMultipleSms.kt
Zdrojový kód vysvetlený v tomto článku je možné stiahnuť, použiť a upravovať bezplatne.
Stiahnuť: SendMultipleSms.kt.zip (150Kb)
Čo obsahuje súbor SendMultipleSms.kt.zip?
Súbor SendMultipleSms.kt.zip obsahuje ukážkový projekt, 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ť viacero SMS z Kotlinu (Rýchle kroky)
Na odoslanie viacerých SMS z Kotlinu:
- 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ý ukážkový projekt
- Vytvorte SMS vytvorením nového objektu Message
- Vytvorte API na odosielanie vašich správ
- Použite metódu Send na odoslanie vašich správ
- 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 Kotlinu 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 Studiu. Po inštalácii je ďalším krokom pripojenie Ozeki SMS Gateway k mobilnej sieti. Môžete 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 Kotlinu
Na odosielanie viacerých SMS z Kotlinu bude váš Kotlin musieť 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 odosielanie viacerých SMS z Kotlinu
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 Kotline 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
HTTP hlavička požiadavky na odosielanie SMS z Kotlinu
Na odosielanie SMS správ je potrebné zahrnúť nasledujúce riadky ako hlavičky do HTTP požiadavky. Upozorňujeme, že zaraďujeme content type a Authorization hlavičku.
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
HTTP požiadavka na odosielanie SMS z Kotlinu
Na odoslanie SMS bude vaša Kotlin aplikácia odosielať 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: 944 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": "50fae4db-be52-4a79-905b-d51d1c83351b", "to_address": "+36201111111", "text": "Hello world 3", "create_date": "2021-06-17T13:59:40", "valid_until": "2021-06-24T13:59:40", "time_to_send": "-999999999-01-01T00:00", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": true }, { "message_id": "6be6e16f-783e-4a88-ba7c-5f37553ee430", "to_address": "+36202222222", "text": "Hello world 2", "create_date": "2021-06-17T13:59:58", "valid_until": "2021-06-24T13:59:58", "time_to_send": "-999999999-01-01T00:00", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": true }, { "message_id": "128495ae-7175-4219-bed5-5da3161e7c1a", "to_address": "+36203333333", "text": "Hello world 1", "create_date": "2021-06-17T14:00:15", "valid_until": "2021-06-24T14:00:15", "time_to_send": "-999999999-01-01T00: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 požiadavka na odoslanie 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 13:48:15 GMT Server: 10/10.3.120 Transfer-Encoding: chunked { "http_code": 200, "response_code": "SUCCESS", "response_msg": "Messages queued for delivery.", "data": { "total_count": 3, "success_count": 3, "failed_count": 0, "messages": [ { "message_id": "50fae4db-be52-4a79-905b-d51d1c83351b", "from_station": "%", "to_address": "+36201111111", "to_station": "%", "text": "Hello world 3", "create_date": "2021-06-17 13:59:40", "valid_until": "2021-06-24 13:59:40", "time_to_send": "2021-06-17 13:59:40", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": false, "tags": [ { "name": "Type", "value": "SMS:TEXT" } ], "status": "SUCCESS" }, { "message_id": "6be6e16f-783e-4a88-ba7c-5f37553ee430", "from_station": "%", "to_address": "+36202222222", "to_station": "%", "text": "Hello world 2", "create_date": "2021-06-17 13:59:58", "valid_until": "2021-06-24 13:59:58", "time_to_send": "2021-06-17 13:59:58", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": false, "tags": [ { "name": "Type", "value": "SMS:TEXT" } ], "status": "SUCCESS" }, { "message_id": "128495ae-7175-4219-bed5-5da3161e7c1a", "from_station": "%", "to_address": "+36203333333", "to_station": "%", "text": "Hello world 1", "create_date": "2021-06-17 14:00:15", "valid_until": "2021-06-24 14:00:15", "time_to_send": "2021-06-17 14:00:15", "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 SendMultipleSms.kt. Keď otvoríte príklad projektu, môžete si všimnúť, že obsahuje balík s názvom Ozeki.Libs.Rest. Tento balík obsahuje MessageApi a všetko potrebné na odoslanie viacerých 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. Môžete skontrolovať log 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. (Obrázok 3)
Ako môžete vidieť na obrázku 4, môžete pomocou aplikácie odoslať viacero SMS správ súčasne. Po odoslaní správ môžete vidieť log po texte správy. Tam získate viac informácií o odoslaných správach. Bude vás informovať o tom, koľko správ bolo odoslaných úspešne a koľko zlyhalo. (Obrázok 4)
Knižnicu Ozeki.Libs.Rest je možné stiahnuť, použiť 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, je potrebné vykonať niekoľko zmien v základnej aplikácii. Aby ste mohli 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 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žiť, 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í (Video návod)
V nasledujúcom videu sa naučíte, ako pridať vyššie spomenuté závislosti do vášho projektu. Začne sa kopírovaním kódu a prevedie vás až k funkčným závislostiam. Video je dlhé len 53 sekúnd, ale obsahuje všetky potrebné kroky na dokončenie procesu. Tento návod môžete ľahko sledovať.
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"
Oba tieto riadky musíte pridať do súboru AndroidManifest.xml. V nasledujúcom videu vám ukážem, kam by ste mali vložiť vyššie uvedené kódy. Oba tieto riadky musíte pridať do súboru AndroidManifest.xml. Video začne kopírovaním kódu a prevedie vás k funkčnému internetovému pripojeniu. Toto video je veľmi ľahko sledovateľné, ale obsahuje všetky potrebné kroky podrobne.
Zhrnutie
Tento článok vám pomôže nastaviť HTTP SMS API v Ozeki SMS Gateway a použiť poskytnutý Kotlin kód na odosielanie viacerých SMS správ. Toto riešenie je perfektné, ak potrebujete čo najrýchlejšie preposlať dôležitú správu viacerým klientom. Je výhodné použiť toto riešenie vo vašej Kotlin aplikácii, aby ste mali vysoko výkonný systém na zdieľanie informácií.
Viac informácií o tejto téme nájdete na webovej stránke Ozeki. Pokračujte v čítaní s článkom s názvom Ako naplánovať SMS v Kotline.
Teraz si stiahnite Ozeki SMS Gateway a začnite rozvíjať svoj biznis!
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