Kako načrtovati SMS v Kotlinu
Najenostavnejši način za pošiljanje SMS-ov iz Kotlina je uporaba vgrajenega HTTP/Rest SMS API-ja Ozeki SMS Gateway. Ko uporabljate ta API, boste pošiljali SMS sporočila z izdajo HTTP Post zahteve do SMS prehoda. HTTP Post zahteva bo vsebovala sporočilo v formatu json. SMS prehod bo poslal ta SMS prejemniku na telefon in vrnil HTTP 200 OK odgovor na vašo zahtevo. (Slika 1)
Kotlin koda za pošiljanje načrtovanega SMS-a na mobilni telefon
Spodnji vzorec kode Kotlin za SMS prikazuje, kako lahko pošljete načrtovan SMS z uporabo http rest SMS API-ja Ozeki SMS Gateway z uporabo knjižnice Kotlin Ozeki.Libs.Rest. Ta knjižnica vam je na voljo brezplačno in jo lahko uporabljate in spreminjate v katerem koli od svojih projektov.
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() } } } }
<?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="Pošlji" 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="Naslov prejemnika:" 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="Sporočilo:" 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 pošiljanja:" 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="Pozdravljen svet!" 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="Dnevniki:" 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>
Kako uporabiti primer Kotlin SMS:
Uporabite lahko razred Message za ustvarjanje SMS-a in razred MessageApi lahko uporabite za pošiljanje načrtovanega SMS-a na SMS prehod. SMS prehod bo vaše sporočilo posredoval v mobilno omrežje prek brezžične povezave ali prek interneta.
Izvorna koda, razložena v tem članku, je na voljo za brezplačen prenos, uporabo in spreminjanje.
Prenos: SendScheduledSms.kt.zip (149Kb)
Kaj vsebuje datoteka SendScheduledSms.kt.zip?
Izvorna koda, razložena v tem članku, je na voljo za brezplačen prenos, uporabo in spreminjanje.
Prenos: SendScheduledSms.kt.zip (149Kb)
Datoteka SendScheduledSms.kt.zip vsebuje primer projekta, ki vključuje knjižnico Ozeki.Libs.Rest. S to knjižnico lahko pošiljate, brišete, označujete in prejemate SMS sporočila z ustvarjanjem MessageApi in uporabo metod Send(), Delete(), Mark() in Receive(). (Slika 2)
Za pošiljanje načrtovanega SMS iz Kotlina:
- Namestite Ozeki SMS Gateway
- Povežite Ozeki SMS Gateway z mobilnim omrežjem
- Pošljite testno SMS sporočilo iz Ozeki GUI
- Ustvarite uporabnika HTTP SMS API
- Android Studio
- Prenesite zgornji primer projekta
- Ustvarite SMS z ustvarjanjem novega objekta Message
- Ustvarite API za pošiljanje vašega načrtovanega sporočila
- Uporabite metodo Send za pošiljanje vašega načrtovanega sporočila
- Preberite odzivno sporočilo na konzoli
- Preverite dnevnike v SMS gatewayu
Za pošiljanje SMS iz Kotlina morate najprej namestiti Ozeki SMS Gateway. SMS gateway lahko namestite na istem računalniku, kjer razvijate svojo Kotlin kodo v Android Studiu. Po namestitvi je naslednji korak povezovanje Ozeki SMS Gateway z mobilnim omrežjem. Lahko pošljete testno SMS sporočilo iz Ozeki GUI, da preverite, ali vaša povezava z mobilnim omrežjem deluje. Zadnji korak pri pripravi vašega okolja je ustvarjanje uporabnika HTTP SMS API. Ustvarite uporabnika z uporabniškim imenom "http_user" in geslom "qwe123", da primer deluje brez sprememb.
Ko je okolje pripravljeno, lahko zaženete svojo Kotlin kodo.
URL HTTP API za pošiljanje SMS iz KotlinaZa pošiljanje načrtovanega SMS iz Kotlina mora vaš Kotlin poslati HTTP zahtevo na SMS gateway. API URL je prikazan spodaj. Upoštevajte, da je treba IP naslov (127.0.0.1) zamenjati z IP naslovom vašega SMS gatewaya. Če je Ozeki SMS Gateway nameščen na istem računalniku, kjer teče JavaScript SMS aplikacija, lahko to ostane 127.0.0.1. Če je nameščen na drugem računalniku, mora biti to IP naslov tega računalnika.
http://127.0.0.1:9509/api?action=rest
Za avtentikacijo Kotlin SMS odjemalca morate poslati uporabniško ime in geslo v base64 kodiranem nizu na strežnik v HTTP zahtevi. Uporabljen format je: base64(uporabniško_ime+":"+geslo). V Kotlinu lahko za to kodiranje uporabite naslednjo kodo:
var usernamePassword = "%s:%s".format(username, password) return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
Na primer, če kodirate uporabniško ime 'http_user' in geslo 'qwe123', boste prejeli naslednji base64 kodiran niz: aHR0cF91c2VyOnF3ZTEyMw==. Za pošiljanje
Glava HTTP zahteve za pošiljanje SMS iz KotlinaZa pošiljanje SMS sporočil morate vključiti naslednje vrstice kot glave v HTTP zahtevo. Upoštevajte, da vključujemo vsebinski tip in glavo Authorization.
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Za oddajo SMS bo vaša Kotlin aplikacija poslala HTTP zahtevo, podobno spodnji. Upoštevajte, da ta zahteva vsebuje del z glavo HTTP in del s telesom HTTP. Telo HTTP je JSON kodiran podatkovni niz. Vsebuje prejemnikov številko in besedilo sporočila.
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 odziv, prejet s primerom SMS v Kotlinu
Ko SMS prehod prejme to zahtevo, bo ustvaril HTTP odziv. HTTP odziv bo vseboval statusno kodo, ki bo pokazala, ali je bila zahteva za oddajo SMS uspešna ali ne. Prav tako bo vrnil strukturo, kodirano v JSON, ki vam bo zagotovila uporabne podrobnosti o oddaji sporočila.
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": "Sporočila v čakalni vrsti za dostavo.", "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": "Pozdravljen, svet!", "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" } ] } }
Kako poslati načrtovan SMS iz Kotlina z uporabo SMS API-ja in zgornjega primera projekta (Video vadnica)
Ta video vam pokaže, kako prenesti in uporabiti projekt SendScheduledSms.kt. Ko odprete primer projekta, boste morda opazili, da obstaja paket, imenovan Ozeki.Libs.Rest. To je paket, ki vsebuje MessageApi in vse, kar potrebujete za pošiljanje načrtovanega SMS-a s Kotlinom.
Kako preveriti, ali je SMS sprejel HTTP uporabnik
Po oddaji SMS-a je dobro preveriti vaš SMS prehod, da vidite, kaj je prejel. Dnevnik lahko preverite tako, da odprete podrobnosti HTTP uporabnika iz konzole za upravljanje Ozeki SMS prehoda. Na koncu zgornjega videa lahko vidite, kako preveriti, ali je zahteva prejeta od http_user.
Kako izgleda uporaba aplikacije na telefonu (Video vadnica)
Na sliki 4 lahko vidite uporabniški vmesnik aplikacije na telefonu. Kot lahko vidite na slikah pred in po, je pošiljanje načrtovanih SMS-ov s to aplikacijo zelo enostavno. Po pošiljanju sporočila bo dnevnik postopka pošiljanja viden pod besedilnim poljem 'Čas za pošiljanje'. Tukaj lahko dobite vse informacije o poslanem sporočilu.
Kako dodati Ozeki.Libs.Rest v svoj projekt
Knjižnico Ozeki.Libs.Rest lahko brezplačno prenesete, uporabljate in spreminjate.
Prenos: Ozeki.Libs.Rest.kt.zip (7.66Kb)
Če se odločite ustvariti svojo aplikacijo sami le s knjižnico Ozeki.Libs.Rest, morate v osnovni aplikaciji spremeniti nekaj stvari. Za uporabo knjižnice Ozeki.Libs.Rest jo morate postaviti v mapo java glavnega imenika.
V naslednjem videu vam bom pokazal, kako prenesti in dodati knjižnico Ozeki.Libs.Rest v svoj projekt.
Odvisnosti
Pomembno je omeniti, da ima knjižnica Ozeki.Libs.Rest nekaj odvisnosti. Za njeno uporabo morate te odvisnosti dodati v 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'
Dodajanje odvisnosti k projektu (Video vadnica)
V naslednjem videu se boste naučili, kako dodati prej omenjene odvisnosti. Začelo se bo s kopiranjem kode in vas bo popeljalo do uspešno priključenih odvisnosti. Video je dolg le 53 sekund, vsebuje pa vse potrebne korake za dokončanje postopka. To vadnico lahko sledite brez večjega truda.
Dostop do interneta
Da bo vaša aplikacija lahko pošiljala
HTTP zahteve, morate omogočiti, da se lahko
poveže z internetom.
V naslednjem videu vam bom pokazal, kako omogočiti dostop do interneta
za vašo aplikacijo v Kotlinu.
<uses-permission android:name="android.permission.INTERNET" />
android:usesCleartextTraffic="true"
Obe vrstici morate dodati v datoteko AndroidManifest.xml. V naslednjem videu vam bom pokazal, kam naj postavite zgornjo kodo. Obe vrstici morate dodati v datoteko AndroidManifest.xml. V naslednjem videu vam bom pokazal, kam naj postavite zgornjo kodo. Video se bo začel s kopiranjem in lepljenjem kode ter vas popeljal do uspešno dodane internetne povezave. Ta video je podroben in omogoča enostavno sledenje.
Povzetek
Ta vadnica vam pokaže korake za načrtovanje SMS-ov v Kotlinu z uporabo HTTP uporabnika Ozeki SMS Gateway. Načrtovanje SMS-ov za dostavo sporočil, ko imajo vaše stranke čas za branje, vam zelo pomaga vzdrževati dobre odnose z njimi. Skrbeti za majhne stvari, kot je iskanje popolnega časa za deljenje misli in informacij, je bistveno, če želite pokazati, kako profesionalno je vaše podjetje.
Nadaljujte z branjem podobnih vadnic na spletni strani Ozeki. Na voljo je več informacij o uporabi Kotlina za delo s SMS sporočili, naslednje pa se naučite Kako prejeti SMS v Kotlinu.
Prenesite Ozeki SMS Gateway zdaj in uporabite, kar ste se naučili!
More information