Jak odeslat více SMS z Kotlinu

Nejjednodušší způsob, jak odeslat SMS z Kotlinu, je použít vestavěné HTTP/Rest SMS API Ozeki SMS Gateway. Když použijete toto API, budete odesílat SMS zprávy vydáním HTTP Post požadavku na SMS bránu. HTTP Post požadavek bude obsahovat zprávu formátovanou ve formátu json. SMS brána odešle tuto SMS na příjemcův telefon a vrátí HTTP 200 OK odpověď na váš požadavek. (Obrázek 1)

jak odeslat více sms z kotlinu
Obrázek 1 - Jak odeslat více SMS z Kotlinu

Kotlin kód pro odesílání více SMS na mobil

Níže uvedený ukázkový kód pro odesílání SMS v Kotlinu demonstruje, jak můžete odeslat více SMS pomocí http rest SMS API Ozeki SMS Gateway s využitím knihovny Kotlin Ozeki.Libs.Rest. Tato knihovna je poskytována zdarma a můžete ji používat a upravovat v jakémkoli z vašich projektů.

Video 1 - Jak stáhnout příklad SendMultipleSms.kt.zip (Návod ve videu)

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 vyplnit všechna pole!", 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="Příjemce:"
        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="Zprá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="Odeslat"
        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="Přidat"
        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>
	

Jak používat příklad pro odesílání SMS v Kotlinu:

Můžete použít třídu Message k vytvoření SMS a třídu MessageApi k odeslání SMS zpráv do SMS brány. SMS brána pak přepošle vaši zprávu do mobilní sítě buď prostřednictvím bezdrátového připojení nebo přes internet.

Stáhnout SendMultipleSms.kt

Zdrojový kód vysvětlený v tomto článku lze stáhnout, použít a upravit zdarma.
Stáhnout: SendMultipleSms.kt.zip (150Kb)

Co obsahuje soubor SendMultipleSms.kt.zip?

Soubor SendMultipleSms.kt.zip obsahuje ukázkový projekt, který v sobě má knihovnu Ozeki.Libs.Rest. S touto knihovnou můžete odesílat, mazat, označovat a přijímat SMS zprávy vytvořením MessageApi a použitím metod Send(), Delete(), Mark() a Receive(). (Obrázek 2)

ukázkový projekt pro odesílání více SMS pomocí Kotlinu
Obrázek 2 - Adresář SendMultipleSms.kt

Jak odeslat více SMS z Kotlinu (Rychlé kroky)

Pro odeslání více SMS z Kotlinu:

  1. Nainstalujte Ozeki SMS Gateway
  2. Připojte Ozeki SMS Gateway k mobilní síti
  3. Odešlete testovací SMS z Ozeki GUI
  4. Vytvořte HTTP SMS API uživatele
  5. Android Studio
  6. Stáhněte výše uvedený ukázkový projekt
  7. Vytvořte SMS vytvořením nového objektu Message
  8. Vytvořte API pro odesílání zpráv
  9. Použijte metodu Send pro odeslání zpráv
  10. Přečtěte si odpověď na konzoli
  11. Zkontrolujte logy v SMS gateway

Instalace Ozeki SMS Gateway a vytvoření HTTP API uživatele

Pro odesílání SMS z Kotlinu je nejprve nutné nainstalovat Ozeki SMS Gateway. SMS gateway lze nainstalovat na stejný počítač, kde vyvíjíte svůj Kotlinový kód v Android Studiu. Po instalaci je dalším krokem připojení Ozeki SMS Gateway k mobilní síti. Můžete odeslat testovací SMS z Ozeki GUI pro ověření, že vaše připojení k mobilní síti funguje. Posledním krokem k přípravě prostředí je vytvoření HTTP SMS API uživatele. Vytvořte uživatele s uživatelským jménem "http_user" a heslem "qwe123", aby ukázka fungovala bez úprav.

Po nastavení prostředí můžete spustit svůj Kotlinový kód.

HTTP API URL pro odesílání SMS z Kotlinu

Pro odesílání více SMS z Kotlinu bude váš Kotlin muset odeslat HTTP požadavek na SMS gateway. API URL je uvedeno níže. Poznámka: IP adresa (127.0.0.1) by měla být nahrazena IP adresou vaší SMS gateway. Pokud je Ozeki SMS Gateway nainstalován na stejném počítači, kde běží JavaScriptová SMS aplikace, může to být 127.0.0.1. Pokud je nainstalován na jiném počítači, měla by to být IP adresa toho počítače.

http://127.0.0.1:9509/api?action=rest
	

HTTP autentizace pro odesílání více SMS z Kotlinu

Pro autentizaci Kotlinového SMS klienta je nutné odeslat uživatelské jméno a heslo v base64 kódovaném řetězci na server v HTTP požadavku. Použitý formát je: base64(username+":"+password). V Kotlinu můžete pro toto kódování použít následující kód:

var usernamePassword = "%s:%s".format(username, password)
return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
	

Například, pokud zakódujete uživatelské jméno 'http_user' a heslo 'qwe123', získáte následující base64 kódovaný řetězec: aHR0cF91c2VyOnF3ZTEyMw==. Pro odeslání

HTTP hlavička požadavku pro odesílání SMS z Kotlinu

Pro odeslání SMS zpráv je nutné do HTTP požadavku zahrnout následující řádky jako hlavičky. Poznámka: Zahrnujeme hlavičku Content-Type a Authorization.

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

HTTP požadavek pro odesílání SMS z Kotlinu

Pro odeslání SMS bude vaše Kotlinová aplikace odesílat HTTP požadavek podobný tomu níže. Poznámka: Tento požadavek obsahuje část HTTP hlavičky a část HTTP těla. HTTP tělo je řetězec dat kódovaný v JSON. Obsahuje číslo příjemce a text zprá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 odpověď přijatá příkladem SMS v Kotlinu

Jakmile SMS brána obdrží tento požadavek, vygeneruje HTTP odpověď. Tato HTTP odpověď bude obsahovat stavový kód, který indikuje, zda byl požadavek na odeslání SMS úspěšný nebo ne. Dále vrátí strukturu zakódovanou v JSONu, která vám poskytne užitečné detaily o odeslání zprá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"
	    }
	  ]
	}
}
	

Jak odeslat více SMS z Kotlinu pomocí SMS API a výše uvedeného příkladu (Video návod)

Toto video vám ukáže, jak stáhnout a použít projekt SendMultipleSms.kt. Jakmile otevřete příklad projektu, můžete si všimnout, že obsahuje balíček nazvaný Ozeki.Libs.Rest. Tento balíček obsahuje MessageApi a vše, co potřebujete k odesílání více SMS pomocí Kotlinu.

Video 2 - Jak odeslat více SMS zpráv pomocí výše uvedeného kódu v Kotlinu (Video návod)

Jak ověřit, že SMS byla přijata HTTP uživatelem

Po odeslání SMS je dobré zkontrolovat vaši SMS bránu, abyste viděli, co přijala. Protokol můžete zkontrolovat otevřením detailů HTTP uživatele v konzoli pro správu Ozeki SMS brány. Na konci výše uvedeného videa uvidíte, jak zkontrolovat, zda byl požadavek přijat http_user. (Obrázek 3)

kotlin projekt pro odesílání více SMS zpráv
Obrázek 3 - Projekt SendMultipleSms.kt v Android Studiu

Jak vypadá použití aplikace na virtuálním telefonu

Jak vidíte na obrázku 4, můžete pomocí aplikace odeslat více SMS zpráv najednou. Po odeslání zpráv uvidíte protokol za textem zprávy. Zde získáte více informací o odeslaných zprávách. Bude vás informovat o tom, kolik zpráv bylo odesláno úspěšně a kolik jich selhalo. (Obrázek 4)

příklad kotlin aplikace pro odesílání více SMS

Obrázek 4 - Příklad aplikace SendMultipleSms před a po odeslání zpráv

Jak přidat Ozeki.Libs.Rest do vlastního projektu

Knihovnu Ozeki.Libs.Rest lze stáhnout, používat a upravovat zdarma.
Stáhnout: Ozeki.Libs.Rest.kt.zip (7.66Kb)

Pokud se rozhodnete vytvořit svou aplikaci sami pouze s knihovnou Ozeki.Libs.Rest, musíte ve své základní aplikaci změnit několik věcí. Pro použití knihovny Ozeki.Libs.Rest ji musíte umístit do složky java hlavního adresáře
V následujícím videu vám ukážu, jak stáhnout a přidat knihovnu Ozeki.Libs.Rest do vašeho vlastního projektu.

Video 3 - Jak přidat knihovnu Ozeki.Libs.Rest do vašeho vlastního projektu (Video návod)

Závislosti

Je důležité zmínit, že knihovna Ozeki.Libs.Rest má některé závislosti. Pro její použití musíte tyto závislosti přidat 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 - Seznam závislostí, které je třeba zahrnout.

V následujícím videu se naučíte, jak přidat výše zmíněné závislosti do vašeho projektu. Začneme kopírováním kódu a provedeme vás až k funkčním závislostem. Video je dlouhé pouze 53 sekund, ale obsahuje všechny potřebné kroky k dokončení procesu. Tento návod můžete snadno sledovat.

Video 4 - Jak přidat potřebné závislosti (Video návod)

Přístup k internetu

Aby bylo možné, aby vaše aplikace odesílala HTTP požadavky, musíte povolit připojení k internetu.
V následujícím videu vám ukážu, jak povolit přístup k internetu pro vaši Kotlin aplikaci.

<uses-permission android:name="android.permission.INTERNET" />
	

Kód 2 - Povolení přístupu k internetu pro vaši Kotlin aplikaci.

android:usesCleartextTraffic="true"
	

Kód 3 - Pro umožnění odesílání HTTP požadavků

Přidání internetového připojení do projektu (Video návod)

Musíte přidat oba tyto řádky do souboru AndroidManifest.xml.
V následujícím videu vám ukážu, kam byste měli výše uvedené kódy umístit. Musíte přidat oba tyto řádky do souboru AndroidManifest.xml. Video začne kopírováním kódu a provede vás až k funkčnímu internetovému připojení. Toto video je velmi snadné sledovat, ale obsahuje všechny kroky, které potřebujete podniknout, podrobně.

Video 5 - Jak povolit přístup k internetu pro vaši aplikaci (Video návod)

Shrnutí

Tento článek vám pomůže nastavit HTTP SMS API v Ozeki SMS Gateway a použít poskytnutý Kotlin kód pro odesílání více SMS zpráv. Toto řešení je ideální, pokud potřebujete rychle předat důležitou zprávu více klientům. Je výhodné použít toto řešení ve vaší Kotlin aplikaci, abyste měli vysoce výkonný systém pro sdílení informací.

Více informací o tomto tématu najdete na webových stránkách Ozeki. Pokračujte ve čtení s článkem nazvaným Jak naplánovat SMS v Kotlinu.

Nyní si stáhněte Ozeki SMS Gateway a začněte rozvíjet svůj byznys!

More information