Jak odeslat 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 vytvořením HTTP Post požadavku na SMS bránu. HTTP Post požadavek bude obsahovat zprávu ve formátu JSON. SMS brána následně odešle tuto SMS na cílové telefonní číslo a vrátí HTTP 200 OK odpověď na váš požadavek. (Obrázek 1)

Následující ukázka kódu Kotlin pro SMS demonstruje, jak můžete odesílat SMS pomocí http rest SMS API Ozeki SMS Gateway s využitím knihovny Kotlin Ozeki.Libs.Rest. Tato knihovna je vám poskytována zdarma a můžete ji používat a upravovat v jakémkoli ze svých projektů.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
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" , ) 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()) } } } } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<? xml version = "1.0" encoding = "utf-8" ?> < androidx.constraintlayout.widget.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android" 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 = "Odeslat" 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 = "Ahoj světe!" 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 = "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/textView2" 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.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 = "Log:" 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 > |
Jak používat příklad Kotlin pro SMS:
Můžete použít třídu Message k vytvoření SMS a třídu MessageApi k odeslání 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 SendSms.kt
Zdrojový kód popsaný v tomto článku lze zdarma stáhnout, použít a upravit.
Stáhnout: SendSms.kt.zip (148Kb)
Co obsahuje soubor SendSms.kt.zip?
Soubor SendSms.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)

Jak odeslat SMS z Kotlinu (Rychlé kroky)
Pro odeslání SMS z Kotlinu:
- Nainstalujte Ozeki SMS Gateway
- Připojte Ozeki SMS Gateway k mobilní síti
- Odešlete testovací SMS z Ozeki GUI
- Vytvořte HTTP SMS API uživatele
- Android Studio
- Stáhněte výše uvedený ukázkový projekt
- Vytvořte SMS vytvořením nového objektu Message
- Vytvořte API pro odeslání zprávy
- Použijte metodu Send pro odeslání zprávy
- Přečtěte si odpověď na konzoli
- Zkontrolujte protokoly 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 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 odesílání SMS z Kotlinu musí váš Kotlin kód 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 tohoto počítače.
1 2 |
http: //127.0.0.1:9509/api?action=rest |
HTTP autentizace pro odesílání 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:
1 2 3 |
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.
1 2 3 |
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
HTTP požadavek pro odesílání SMS z Kotlinu
Pro odeslání SMS váš Kotlin aplikace odešle HTTP požadavek podobný tomuto níže. Poznámka: Tento požadavek obsahuje část HTTP hlavičky a část HTTP těla. HTTP tělo je JSON kódovaný datový řetězec. Obsahuje číslo příjemce a text zprávy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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 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á poskytuje užitečné detaily o odeslání zprávy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
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" : "Zprávy zařazeny k odeslání." , "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" } ] } } |
Jak odeslat 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 SendSms.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 odeslání SMS pomocí Kotlinu.
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. Protokoly 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 ověřit, zda byl požadavek přijat http_user. (Obrázek 3)

Jak vypadá použití aplikace
Na obrázku 4 můžete vidět, jak vypadá aplikace po odeslání zprávy. Jak vidíte, dříve odeslané zprávy jsou uloženy jako log pod textovým polem 'Zpráva'. Můžete vidět všechny informace o zprávě, jako je odesílatel, text a výsledek procesu odeslání.

Jak ověřit, že SMS byla odeslána do mobilní sítě
Posledním krokem při ověřování procesu je podívat se na protokoly připojení k mobilní síti. Možná budete muset před odesláním zprávy zapnout protokolování v konfiguraci připojení, abyste viděli protokoly. Pokud je protokolování zapnuto, uvidíte telefonní číslo a text odeslané zprávy.
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 v 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.
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.
1 2 3 4 |
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' |
V následujícím videu se naučíte, jak přidat výše zmíněné závislosti. Začneme kopírováním kódu a provedeme vás celým procesem až k úspěšnému přidání závislostí. Video je dlouhé pouze 53 sekund, ale obsahuje všechny potřebné kroky k dokončení procesu. Tento návod můžete snadno sledovat.
Přístup k internetu
Aby vaše aplikace mohla odesílat HTTP požadavky, musíte jí umožnit připojení k internetu.
V následujícím videu vám ukážu, jak povolit internetový přístup pro vaši Kotlin aplikaci.
1 2 |
<uses-permission android:name= "android.permission.INTERNET" /> |
1 2 |
android:usesCleartextTraffic= "true" |
Jak povolit internetové připojení pro vaši aplikaci (Videoná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.
Video začne kopírováním kódu a provede vás až k úspěšnému přidání internetového připojení.
Toto video je podrobné a snadno se podle něj postupuje.
Závěr
Cílem tohoto průvodce bylo ukázat vám, jak odesílat SMS zprávy z Kotlinu pomocí HTTP SMS API Ozeki SMS Gateway. Získané znalosti vám umožní zůstat v kontaktu se svými zákazníky pomocí jednoduchého Kotlin kódu. Mezinárodní zasílání zpráv je s Ozeki SMS Gateway také možné, protože funguje v jakékoli zemi a může odesílat a přijímat SMS přes různé mobilní připojení.
Nezapomeňte pokračovat ve studiu zde, navštivte další stránky s návody na webu Ozeki pro více informací. Podívejte se na další průvodce o používání Kotlinu, začněte s Jak odeslat více SMS z Kotlinu.
Nyní je vaším prvním krokem stáhnout Ozeki SMS Gateway a začít jej používat!
More information
- Kotlin odeslání SMS pomocí HTTP REST API (ukázka kódu)
- Kotlin odeslání více SMS pomocí HTTP REST API (ukázka kódu)
- Kotlin naplánování SMS pomocí HTTP REST API (ukázka kódu)
- Kotlin příjem SMS pomocí HTTP REST API (ukázka kódu)
- Kotlin smazání SMS pomocí HTTP REST API (ukázka kódu)
- Github: Kotlin SMS API