Cum să primești un SMS în Kotlin
Cea mai simplă metodă de a trimite SMS din Kotlin este utilizarea API-ului HTTP/Rest SMS încorporat al Ozeki SMS Gateway. Când folosești acest API, vei trimite mesaje SMS prin emiterea unei cereri HTTP Post către gateway-ul SMS. Cererea HTTP Post va conține un mesaj formatat în format json. Gateway-ul SMS va trimite acest SMS către telefonul destinatar și va returna un răspuns HTTP 200 OK la cererea ta. (Figura 1)
Exemplul de cod Kotlin pentru SMS de mai jos demonstrează cum poți primi mesaje SMS folosind API-ul http rest sms al Ozeki SMS Gateway cu ajutorul bibliotecii Kotlin Ozeki.Libs.Rest. Această bibliotecă este oferită gratuit și o poți folosi și modifica în oricare dintre proiectele tale.
MainActivity.kt
package receive.sms import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import Ozeki.Libs.Rest.* import android.widget.ArrayAdapter import kotlinx.coroutines.* class MainActivity : AppCompatActivity() { @DelicateCoroutinesApi override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val listMessages:android.widget.ListView = findViewById(R.id.listMessages) val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest) val configuration = Configuration( username = "http_user", password = "qwe123", apiurl = "http://10.0.2.2:9509/api" ) val messages_label : ArrayList<Message> = arrayListOf() val arrayAdapter = ArrayAdapter<Message>(this, android.R.layout.simple_list_item_1, messages_label) listMessages.adapter = arrayAdapter val api = MessageApi(configuration) btnSendRequest.setOnClickListener { GlobalScope.launch(Dispatchers.IO) { val result = api.DownloadIncomming() val messages = result.Messages for (index in 0 until messages.size) { messages_label.add(messages.get(index)) } } arrayAdapter.notifyDataSetChanged() } } }
<?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="wrap_content" android:layout_marginTop="24dp" android:backgroundTint="#FF3F3F" android:text="Descarcă mesaje primite" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/listMessages" /> <TextView android:id="@+id/textMessages" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:text="Mesaje" android:textAlignment="center" android:textSize="22sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <ListView android:id="@+id/listMessages" android:layout_width="320dp" android:layout_height="500dp" android:layout_marginTop="24dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textMessages" /> </androidx.constraintlayout.widget.ConstraintLayout>
Cum să folosești exemplul Kotlin pentru SMS:
Poți folosi clasa MessageApi pentru a primi mesaje SMS de la gateway-ul SMS. Cererea ta de pe dispozitiv va fi transmisă către gateway-ul SMS prin internet.
Descarcă ReceiveSms.kt
Codul sursă explicat în acest articol poate fi descărcat, folosit și modificat gratuit.
Descarcă: ReceiveSms.kt.zip (148Kb)
Fișierul ReceiveSms.kt.zip conține un proiect exemplu, care include biblioteca Ozeki.Libs.Rest. Cu această bibliotecă poți trimite, șterge, marca și primi mesaje SMS prin crearea unui MessageApi și folosind metodele Send(), Delete(), Mark() și Receive(). (Figura 2)
Pentru a primi SMS cu Kotlin:
- Instalează Ozeki SMS Gateway
- Conectează Ozeki SMS Gateway la rețeaua mobilă
- Trimite un SMS test din Ozeki GUI
- Crează un utilizator HTTP sms api
- Android Studio
- Descarcă proiectul exemplu de mai sus
- Crează un api pentru a descărca mesajele primite
- Folosește metoda DownloadIncoming() pentru a primi mesajele tale
- Citește mesajul de răspuns pe consolă
- Verifică jurnalele din gateway-ul SMS
Instalează Ozeki SMS Gateway și creează un utilizator HTTP API
Pentru a putea primi SMS cu Kotlin, mai întâi trebuie să instalezi Ozeki SMS Gateway. Gateway-ul SMS poate fi instalat pe același computer unde dezvolți codul Kotlin în Android Studio. După instalare, următorul pas este să conectezi Ozeki SMS Gateway la rețeaua mobilă. Poți creezi un utilizator HTTP SMS API. Creează un utilizator cu numele de utilizator "http_user" și parola "qwe123" pentru ca exemplul să funcționeze fără modificări.
După ce mediul este configurat, poți rula codul Kotlin.
URL-ul API HTTP pentru a trimite SMS din Kotlin
Pentru a primi SMS cu Kotlin, aplicația ta Kotlin va trebui să trimită o cerere HTTP către gateway-ul SMS. URL-ul API este afișat mai jos. Reține că adresa IP (127.0.0.1) ar trebui să fie înlocuită cu adresa IP a gateway-ului tău SMS. Dacă Ozeki SMS Gateway este instalat pe același computer unde rulează aplicația JavaScript pentru SMS, poate fi 127.0.0.1. Dacă este instalat pe un computer diferit, ar trebui să fie adresa IP a acelui computer.
http://127.0.0.1:9509/api?action=rest
Autentificarea HTTP pentru a primi SMS cu Kotlin
Pentru a autentifica clientul SMS Kotlin, trebuie să trimiți numele de utilizator și parola într-un șir codat base64 către server într-o cerere HTTP. Formatul folosit este: base64(nume_utilizator+":"+parolă). În Kotlin poți folosi următorul cod pentru a face această codare:
var usernamePassword = "%s:%s".format(username, password) return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
De exemplu, dacă codezi numele de utilizator 'http_user' și parola 'qwe123', vei obține următorul șir codat base64: aHR0cF91c2VyOnF3ZTEyMw==. Pentru a trimite
Antetul cererii HTTP pentru a trimite SMS din Kotlin
Pentru a primi mesajul(ele) SMS, trebuie să incluzi următoarele linii ca antete în cererea HTTP. Reține că includem un antet pentru tipul de conținut și unul pentru autorizare.
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cererea HTTP pentru a primi SMS cu Kotlin
Pentru a primi mesajul(ele) SMS primite, aplicația ta Kotlin va trimite o cerere HTTP similară cu cea de mai jos. Reține că această cerere conține o parte pentru antetul HTTP și o parte pentru corpul HTTP. Corpul HTTP este un șir de date codat JSON. Conține numărul destinatarului și textul mesajului.
GET /api?action=receivemsg&folder=inbox HTTP/1.1 Connection: Keep-Alive Accept-Encoding: gzip Authorization: Basic aHR0cF91c2VyOnF3ZTEyMw== Host: 10.0.2.2:9509 User-Agent: okhttp/4.2.2
Răspunsul HTTP primit de exemplul Kotlin pentru SMS
Odată ce gateway-ul SMS primește această cerere, va genera un răspuns HTTP. Răspunsul HTTP va conține un cod de stare, pentru a indica dacă cererea de trimitere SMS a fost reușită sau nu. De asemenea, va returna o structură codată JSON pentru a-ți oferi detalii utile despre trimiterea mesajului.
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 16:10:48 GMT Server: 10/10.3.120 Transfer-Encoding: chunked { "http_code": 200, "response_code": "SUCCESS", "response_msg": "", "data": { "folder": "inbox", "limit": "1000", "data": [ { "message_id": "ada7ee44-aefc-e746-9376-b76e3674442a", "from_connection": "http_user@localhost", "from_address": "+36203333333", "from_station": "%", "to_connection": "http_user@localhost", "to_address": "http_user", "to_station": "%", "text": "Hello world 3", "create_date": "2021-06-17 16:09:11", "valid_until": "2021-06-24 16:09:11", "time_to_send": "2021-06-17 16:09:11", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": true, "tags": [ { "name": "Type", "value": "SMS:TEXT" } ] }, { "message_id": "fccc6211-c710-c80e-a28f-664ff8b0e964", "from_connection": "http_user@localhost", "from_address": "+36201111111", "from_station": "%", "to_connection": "http_user@localhost", "to_address": "http_user", "to_station": "%", "text": "Hello world 1", "create_date": "2021-06-17 16:09:11", "valid_until": "2021-06-24 16:09:11", "time_to_send": "2021-06-17 16:09:11", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": true, "tags": [ { "name": "Type", "value": "SMS:TEXT" } ] }, { "message_id": "ba782a64-05cd-8ba8-9f4c-e8597ca30b59", "from_connection": "http_user@localhost", "from_address": "+36202222222", "from_station": "%", "to_connection": "http_user@localhost", "to_address": "http_user", "to_station": "%", "text": "Hello world 2", "create_date": "2021-06-17 16:09:11", "valid_until": "2021-06-24 16:09:11", "time_to_send": "2021-06-17 16:09:11", "submit_report_requested": true, "delivery_report_requested": true, "view_report_requested": true, "tags": [ { "name": "Type", "value": "SMS:TEXT" } ] } ] } }
Cum să primești mesaje SMS cu Kotlin folosind API-ul SMS și proiectul exemplu de mai sus (Tutorial video)
Acest videoclip vă arată cum să descărcați și să utilizați proiectul ReceiveSms.kt. Odată ce ați deschis proiectul exemplu, s-ar putea să observați că există un pachet numit Ozeki.Libs.Rest. Acesta este pachetul care conține MessageApi și toate elementele necesare pentru a primi mesaje SMS folosind Kotlin.
Cum să verifici dacă cererea a fost acceptată de utilizatorul HTTP
După ce SMS-ul a fost trimis, este o idee bună să verifici gateway-ul tău SMS, pentru a vedea ce a primit. Poți verifica jurnalul deschizând detaliile utilizatorului HTTP din consola de management Ozeki SMS Gateway. La sfârșitul videoclipului de mai sus poți vedea cum să verifici dacă cererea a fost primită de http_user. (Figura 3)
În Figura 4, poți vedea cum arată utilizarea aplicației pe un telefon. După cum poți observa în imaginea Înainte, implicit nu ai mesaje primite. Apasă butonul 'Descarcă Mesaje Primite' pentru a obține mesajele trimise pentru tine. În imaginea După, poți vedea că toate informațiile despre un mesaj sunt vizibile atunci când îl descarci.
Biblioteca Ozeki.Libs.Rest poate fi descărcată, utilizată și modificată gratuit.
Descarcă: Ozeki.Libs.Rest.kt.zip (7.66Kb)
Dacă decizi să creezi aplicația ta doar cu biblioteca Ozeki.Libs.Rest,
trebuie să faci câteva modificări în aplicația ta de bază.
Pentru a utiliza biblioteca Ozeki.Libs.Rest, trebuie să o plasezi în folderul java
din directorul principal
În următorul videoclip vă voi arăta cum să descărcați și să adăugați biblioteca Ozeki.Libs.Rest
în propriul vostru proiect.
Dependințe
Este important de menționat că biblioteca Ozeki.Libs.Rest are câteva dependințe. Pentru a o utiliza, trebuie să adăugați aceste dependințe în 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'
În următorul videoclip, vei vedea cum să atașezi dependințele menționate anterior. Voi începe cu copierea codului și te voi conduce până la adăugarea cu succes a dependințelor. Videoclipul durează doar 53 de secunde, dar conține toți pașii necesari pentru a finaliza metoda. Poți urmări acest tutorial fără efort.
Acces la internet
Pentru a permite aplicației tale să trimită
o cerere HTTP, trebuie să activezi aplicația
să se conecteze la internet.
În următorul videoclip vă voi arăta cum să activați accesul la internet
pentru aplicația voastră Kotlin.
<uses-permission android:name="android.permission.INTERNET" />
android:usesCleartextTraffic="true"
Trebuie să adaugi ambele linii în fișierul AndroidManifest.xml.
În următorul videoclip, vă voi arăta unde ar trebui să inserați codurile de mai sus.
Videoclipul va începe cu copierea codului și vă va conduce până la adăugarea cu succes a conexiunii la internet.
Acest videoclip este precis și ușor de urmărit.
Concluzie
Acest ghid a fost scris pentru a arăta pașii de primire a SMS-urilor în Kotlin folosind utilizatorul HTTP al Ozeki SMS Gateway. Această soluție vă ajută să colectați mesajele primite în folderul Inbox și să le mutați în programul vostru Kotlin. Folosind această soluție, aveți posibilitatea să vă mențineți sistemul de mesagerie organizat așa cum ați planificat.
Acesta este doar începutul, aflați mai multe despre gestionarea mesajelor pe pagina web Ozeki. Pentru a rămâne eficient și la curent, sortați mesajele, citiți următorul articol despre Cum să ștergeți un SMS în Kotlin.
Să trecem la treabă, configurați acum Ozeki SMS Gateway!
More information
- Kotlin send SMS with the HTTP rest API (code sample)
- Kotlin send multiple SMS with the HTTP rest API (code sample)
- Kotlin schedule SMS with the HTTP rest API (code sample)
- Kotlin receive SMS with the HTTP rest API (code sample)
- Kotlin delete SMS with the HTTP rest API (code sample)
- Github: Kotlin SMS API