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)

cum să primești un sms în kotlin
Figura 1 - Cum să primești un SMS în Kotlin

Cod Kotlin pentru a primi SMS pe mobil

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.

Video 1 - Cum să descarci exemplul ReceiveSms.kt.zip (Tutorial video)

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

Ce conține fișierul ReceiveSms.kt.zip?

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)

proiect exemplu pentru a primi sms folosind kotlin
Figura 2 - Directorul ReceiveSms.kt

Cum să primești SMS cu Kotlin (Pași rapizi)

Pentru a primi SMS cu Kotlin:

  1. Instalează Ozeki SMS Gateway
  2. Conectează Ozeki SMS Gateway la rețeaua mobilă
  3. Trimite un SMS test din Ozeki GUI
  4. Crează un utilizator HTTP sms api
  5. Android Studio
  6. Descarcă proiectul exemplu de mai sus
  7. Crează un api pentru a descărca mesajele primite
  8. Folosește metoda DownloadIncoming() pentru a primi mesajele tale
  9. Citește mesajul de răspuns pe consolă
  10. 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.

Video 2 - Cum să primești mesaje SMS cu codul Kotlin de mai sus (Tutorial video)

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)

proiect kotlin pentru primirea mesajelor sms
Figura 3 - Proiectul ReceiveSms.kt în Android Studio

Cum arată utilizarea aplicației pe un telefon (tutorial video)

Î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.

aplicație exemplu kotlin pentru primirea mesajelor sms

Figura 4 - Aplicația exemplu ReceiveSms înainte și după ce mesajele au fost descărcate

Cum să adaugi Ozeki.Libs.Rest în propriul tău proiect

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.

Video 3 - Cum să adaugi biblioteca Ozeki.Libs.Rest în propria aplicație (Tutorial video)

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'
	

Codul 1 - Lista dependințelor pe care trebuie să le incluzi.

Adaugă dependințele (Tutorial video)

Î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.

Video 4 - Cum să adaugi dependințele necesare (Tutorial video)

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

Codul 2 - Pentru a activa accesul la internet pentru aplicația ta Kotlin.

android:usesCleartextTraffic="true"
	

Codul 3 - Pentru a permite trimiterea cererilor http

Cum să adaugi conexiune la internet în proiectul tău (Tutorial video)

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.

Video 5 - Cum să permiți accesul la internet pentru aplicația ta (Tutorial video)

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