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)

ako poslať viacero SMS z Kotlinu
Obrázok 1 - Ako poslať viacero SMS z Kotlinu

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.

Video 1 - Ako stiahnuť SendMultipleSms.kt.zip príklad (Video návod)

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())
            }
        }

    }
}
	
main_activity.xml
<?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)

ukážkový projekt na odoslanie viacerých SMS pomocou Kotlinu
Obrázok 2 - Adresár SendMultipleSms.kt

Ako odoslať viacero SMS z Kotlinu (Rýchle kroky)

Na odoslanie viacerých SMS z Kotlinu:

  1. Nainštalujte Ozeki SMS Gateway
  2. Pripojte Ozeki SMS Gateway k mobilnej sieti
  3. Odošlite testovaciu SMS z Ozeki GUI
  4. Vytvorte HTTP SMS API používateľa
  5. Android Studio
  6. Stiahnite si vyššie uvedený ukážkový projekt
  7. Vytvorte SMS vytvorením nového objektu Message
  8. Vytvorte API na odosielanie vašich správ
  9. Použite metódu Send na odoslanie vašich správ
  10. Prečítajte si odpoveď na konzole
  11. 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"
	    }
	  ]
	}
}
	
Ako odoslať viacero SMS z Kotlinu pomocou SMS API a vyššie uvedeného príkladu (Video návod)

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.

Video 2 - Ako odoslať viacero SMS správ pomocou vyššie uvedeného kódu Kotlin (Video návod)

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)

kotlin projekt na odoslanie viacerých SMS správ
Obrázok 3 - Projekt SendMultipleSms.kt v Android Studiu

Ako vyzerá používanie aplikácie na virtuálnom telefóne

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)

príkladová kotlin aplikácia na odoslanie viacerých SMS

Obrázok 4 - Príkladová aplikácia SendMultipleSms pred a po odoslaní správ

Ako pridať Ozeki.Libs.Rest do vlastného projektu

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.

Video 3 - Ako pridať knižnicu Ozeki.Libs.Rest do vlastnej aplikácie (Video návod)

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'
	

Kód 1 - Zoznam závislostí, ktoré je potrebné zahrnúť.

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ť.

Video 4 - Ako pridať potrebné závislosti (Video návod)

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" />
	

Kód 2 - Povolenie prístupu k internetu pre vašu Kotlin aplikáciu.

android:usesCleartextTraffic="true"
	

Kód 3 - Umožnenie odosielania HTTP požiadaviek

Pridanie internetového pripojenia do projektu (Video návod)

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.

Video 5 - Ako povoliť prístup k internetu pre vašu aplikáciu (Video návod)

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