Ako poslať 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 API, budete posielať 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 pošle túto SMS na príjemcove telefónne číslo a vráti HTTP 200 OK odpoveď na vašu požiadavku. (Obrázok 1)

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

Ukážka kódu Kotlin na odoslanie SMS nižšie demonštruje, ako môžete odoslať 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 ktoromkoľvek z vašich projektov.

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

MainActivity.kt
package send.sms

import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import androidx.annotation.RequiresApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import Ozeki.Libs.Rest.Configuration
import Ozeki.Libs.Rest.Message
import Ozeki.Libs.Rest.MessageApi

class MainActivity : AppCompatActivity() {
    @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest)
        val inputToAddress:android.widget.EditText = findViewById(R.id.inputToAddress)
        val inputMessage:android.widget.EditText = findViewById(R.id.inputMessage)
        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() != "") {
                GlobalScope.launch(Dispatchers.IO) {
                    val msg = Message()
                    msg.ToAddress = inputToAddress.text.toString()
                    msg.Text = inputMessage.text.toString()
                    inputToAddress.text.clear()
                    inputMessage.text.clear()
                    val response = api.Send(msg)
                    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="send.sms.MainActivity">

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:layout_marginBottom="24dp"
        android:text="Odoslať"
        android:backgroundTint="#FF3F3F"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/logBox"
        app:layout_constraintVertical_bias="0.776" />

    <EditText
        android:id="@+id/inputMessage"
        android:layout_width="320dp"
        android:layout_height="150dp"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:gravity="start|top"
        android:hint="Hello world!"
        android:inputType="textMultiLine"
        android:textColorHint="#BFBFBF"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <TextView
        android:id="@+id/textView"
        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/textView2"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="Adresát:"
        android:textSize="20sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/inputToAddress"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:ems="10"
        android:hint="+36201111111"
        android:inputType="textPersonName"
        android:textColorHint="#BFBFBF"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <TextView
        android:id="@+id/logBox"
        android:layout_width="320dp"
        android:layout_height="160dp"
        android:layout_marginTop="36dp"
        android:scrollbars="vertical"
        android:text="Záznam:"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputMessage" />

</androidx.constraintlayout.widget.ConstraintLayout>
	

Ako použiť príklad Kotlin SMS:

Môžete použiť triedu Message na vytvorenie SMS a triedu MessageApi na odoslanie 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 cez internet.

Stiahnuť SendSms.kt

Zdrojový kód vysvetlený v tomto článku je možné stiahnuť, používať a upravovať bezplatne.
Stiahnuť: SendSms.kt.zip (148Kb)

Čo obsahuje súbor SendSms.kt.zip?

Súbor SendSms.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)

príklad projektu na odoslanie sms pomocou node js
Obrázok 2 - Adresár SendSms.kt

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

Na odoslanie 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ý príklad projektu
  7. Vytvorte SMS vytvorením nového objektu Message
  8. Vytvorte API na odoslanie vašej správy
  9. Použite metódu Send na odoslanie vašej správy
  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 odoslanie SMS z Kotlinu musíte najprv nainštalovať Ozeki SMS Gateway. SMS gateway sa môže 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 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 používateľským 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 odoslanie SMS z Kotlinu

Na odoslanie 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 odoslanie SMS z Kotlinu

Na autentifikáciu Kotlin SMS klienta musíte 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(username+":"+password). 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 odoslanie SMS z Kotlinu

Na odoslanie SMS správ musíte do HTTP požiadavky zahrnúť nasledujúce riadky ako hlavičky. Upozorňujeme, že obsahujeme hlavičku Content-Type a Authorization.

Content-Type: application/json
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
	

HTTP požiadavka na odoslanie 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ť tela HTTP. Telo HTTP je reťazec dát zakódovaný v JSON. Obsahuje číslo príjemcu a text správ.

POST /api?action=sendmsg HTTP/1.1
Connection: Keep-Alive
Content-Length: 323
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":	"b686acf6-7420-4a3d-b444-779dcffc652b",
			"to_address":	"+36201111111",
			"text":	"Hello world!",
			"create_date":	"2021-06-17T09:48:30",
			"valid_until":	"2021-06-24T09:48:30",
			"time_to_send":	"-999999999-01-01T00:00",
			"submit_report_requested":	true,
			"delivery_report_requested":	true,
			"view_report_requested":	true
		}
	]
}
	

HTTP odpoveď prijatá príkladom SMS v Kotline

Keď SMS brána prijme túto požiadavku, vygeneruje HTTP odpoveď. HTTP odpoveď bude obsahovať stavový kód, ktorý indikuje, či bola odosielateľská požiadavka SMS úspešná alebo nie. Taktiež vráti štruktúru zakódovanú v JSON, ktorá poskytuje 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: Wed, 16 Jun 2021 09:06:03 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": "b686acf6-7420-4a3d-b444-779dcffc652b",
	      "from_station": "%",
	      "to_address": "+36201111111",
	      "to_station": "%",
	      "text": "Hello world!",
	      "create_date": "2021-06-17 09:48:30",
	      "valid_until": "2021-06-24 09:48:30",
	      "time_to_send": "2021-06-17 09:48:30",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": false,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ],
	      "status": "SUCCESS"
	    }
	  ]
	}
}
	

Ako poslať SMS z Kotlinu pomocou SMS API a vyššie uvedeného príkladu projektu (Video tutoriál)

Toto video vám ukáže, ako stiahnuť a použiť projekt SendSms.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 SMS pomocou Kotlinu.

Video 2 - Ako poslať SMS pomocou vyššie uvedeného kódu v Kotline (Video tutoriál)

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. (Obrázok 3)

kotlin project to send sms message
Obrázok 3 - Projekt SendSms.kt v Android Studiu

Ako vyzerá používanie aplikácie

Na obrázku 4 môžete vidieť, ako vyzerá aplikácia po odoslaní správy. Ako vidíte, vaše predchádzajúce odoslané správy budú uložené ako log pod textovým poľom 'Message'. Môžete vidieť všetky informácie o správe, ako odosielateľ, text a výsledok odosielacieho procesu.

example kotlin application to send sms
Obrázok 4 - Príklad aplikácie SendSms pred a po odoslaní správy

Ako skontrolovať, že SMS bola odoslaná do mobilnej siete

Posledným krokom pri overovaní procesu je pozrieť sa na logy pripojenia k mobilnej sieti. Možno budete musieť pred odoslaním správy zapnúť logovanie v konfigurácii pripojenia, aby ste videli logy. Ak je logovanie povolené, uvidíte telefónne číslo a text správy, ktorú ste odoslali.

Video 3 - Ako otestovať, či SMPP klient prijal našu požiadavku (Video tutoriál)

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

Knižnicu Ozeki.Libs.Rest je možné 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, 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 v hlavnom adresári.
V nasledujúcom videu vám ukážem, ako stiahnuť a pridať knižnicu Ozeki.Libs.Rest do vlastného projektu.

Video 4 - Ako pridať knižnicu Ozeki.Libs.Rest do vlastnej aplikácie (Video tutoriál)

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'
	

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

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 pridaný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 5 - Ako pridať potrebné závislosti (Videoná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

Ako povoliť internetové pripojenie pre vašu aplikáciu (Videonávod)

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 kódu a prevedie vás až k úspešne pridanému internetovému pripojeniu. Toto video je podrobné a ľahko sa sleduje.

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

Záver

Cieľom tohto sprievodcu bolo ukázať vám, ako odosielať SMS správy z Kotlinu pomocou HTTP SMS API Ozeki SMS Gateway. Tieto získané vedomosti vám umožňujú zostať v kontakte so svojimi zákazníkmi pomocou jednoduchého Kotlin kódu. Medzinárodné zasielanie správ je možné aj s Ozeki SMS Gateway, pretože funguje v každej krajine a môže odosielať a prijímať SMS cez rôzne mobilné pripojenia.

Nezabudnite pokračovať v štúdiu tu, navštívte ďalšie stránky s návodmi na webovej stránke Ozeki pre viac informácií. Pozrite si ďalšie sprievodce o používaní Kotlinu, začnite s Ako odosielať viacero SMS z Kotlinu.

Teraz je vašou prvou úlohou stiahnuť si Ozeki SMS Gateway a začať ho používať!

More information