Jak naplánovat SMS v 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 příjemci a vrátí odpověď HTTP 200 OK na váš požadavek. (Obrázek 1)

jak naplánovat sms v kotlinu
Obrázek 1 - Jak naplánovat SMS v Kotlinu

Níže uvedený ukázkový kód pro odesílání SMS v Kotlinu demonstruje, jak můžete odeslat naplánovanou 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 ze svých projektů.

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

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

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

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:layout_marginTop="36dp"
        android:text="Odeslat"
        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="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/textMessage"
        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" />

    <TextView
        android:id="@+id/textWhen"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Čas odeslání:"
        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 světe!"
        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="Protokol:"
        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>
	

Jak používat příklad SMS v Kotlinu:

Můžete použít třídu Message k vytvoření SMS a třídu MessageApi k odeslání naplánované SMS do SMS brány. SMS brána 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 SendScheduledSms.kt

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

Co obsahuje soubor SendScheduledSms.kt.zip?

Soubor SendScheduledSms.kt.zip obsahuje ukázkový projekt, který obsahuje 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í naplánovaných SMS pomocí Kotlinu
Obrázek 2 - Adresář SendScheduledSms.kt

Jak odeslat naplánovanou SMS z Kotlinu (Rychlé kroky)

Pro odeslání naplánované 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 odeslání vaší naplánované zprávy
  9. Použijte metodu Send k odeslání vaší naplánované zprávy
  10. Přečtěte si odpověď na konzoli
  11. Zkontrolujte protokoly v SMS bráně

Nainstalujte Ozeki SMS Gateway a vytvořte HTTP API uživatele

Pro odesílání SMS z Kotlinu je nejprve nutné nainstalovat Ozeki SMS Gateway. SMS bránu lze nainstalovat na stejný počítač, kde vyvíjíte svůj Kotlin 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 přípravy 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 Kotlin kód.

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

Pro odeslání naplánované SMS z Kotlinu musí váš Kotlin odeslat HTTP požadavek na SMS bránu. API URL je uvedeno níže. Poznámka: IP adresa (127.0.0.1) by měla být nahrazena IP adresou vaší SMS brány. Pokud je Ozeki SMS Gateway nainstalována na stejném počítači, kde běží JavaScriptová SMS aplikace, může to být 127.0.0.1. Pokud je nainstalována na jiném počítači, měla by to být IP adresa tohoto počítače.

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

HTTP autentizace pro odeslání naplánované SMS z Kotlinu

Pro autentizaci Kotlin 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 odeslá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 odeslání SMS z Kotlinu

Pro odeslání SMS bude vaše Kotlin 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: 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 odpověď přijatá Kotlin SMS příkladem

Jakmile SMS brána obdrží tento požadavek, vygeneruje HTTP odpověď. HTTP odpověď bude obsahovat stavový kód, který indikuje, zda byl požadavek na odeslání SMS úspěšný nebo ne. Také 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 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"
	    }
	  ]
	}
}
	

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

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

Video 2 - Jak odeslat naplánovanou SMS s výše uvedeným kódem v Kotlinu (Video návod)

Jak zkontrolovat, ž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.

kotlin projekt pro odesílání naplánovaných sms zpráv
Obrázek 3 - Projekt SendScheduledSms.kt v Android Studiu

Jak vypadá používání aplikace na telefonu (Video návod)

Na obrázku 4 můžete vidět uživatelské rozhraní aplikace na telefonu. Jak můžete vidět na obrázcích před a po, odesílání naplánovaných SMS je s touto aplikací velmi snadné. Po odeslání zprávy bude protokol procesu odesílání viditelný pod textovým polem 'Čas odeslání'. Zde můžete získat všechny informace o odeslané zprávě.

příklad kotlin aplikace pro odesílání naplánovaných sms

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

Jak přidat Ozeki.Libs.Rest do vašeho 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í. Abyste mohli knihovnu Ozeki.Libs.Rest používat, musíte ji 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ší vlastní aplikace (Video návod)

Závislosti

Je důležité zmínit, že knihovna Ozeki.Libs.Rest má některé závislosti. Abyste ji mohli používat, 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é musíte zahrnout.

V následujícím videu se naučíte, jak přidat výše zmíněné závislosti. Začne kopírováním kódu a provede vás až k úspěšně připojeným závislostem. Video je dlouhé pouze 53 sekund, ale obsahuje všechny potřebné kroky k dokončení procesu. Tento tutoriál můžete sledovat bez jakéhokoliv úsilí.

Video 4 - Jak přidat potřebné závislosti (Video tutoriál)

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ů

Povolení internetového připojení pro váš projekt (Video tutoriál)

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. V následujícím videu vám ukážu, kam byste měli výše uvedené kódy umístit. Video začne kopírováním a vložením kódu a provede vás až k úspěšně přidanému internetovému připojení. Toto video je podrobné a nabízí snadné sledování.

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

Shrnutí

Tento průvodce vám ukazuje kroky plánování SMS v Kotlinu pomocí HTTP uživatele Ozeki SMS Gateway. Plánování SMS pro doručení zpráv, když mají vaši zákazníci čas je číst, vám skutečně pomáhá udržovat dobrý vztah s nimi. Starat se o maličkosti, jako je nalezení perfektního načasování pro sdílení myšlenek a informací, je zásadní, pokud chcete ukázat, jak profesionální je vaše podnikání.

Pokračujte ve čtení tutoriálů jako je tento na webových stránkách Ozeki. Najdete zde více informací o používání Kotlinu pro práci se SMS zprávami, dále se naučte Jak přijímat SMS v Kotlinu.

Stáhněte si Ozeki SMS Gateway nyní a využijte to, co jste se naučili!

More information