Cum să trimiți mai multe SMS-uri din Kotlin

Cea mai simplă metodă de a trimite SMS-uri 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 destinatarului și va returna un răspuns HTTP 200 OK la cererea ta. (Figura 1)

cum să trimiți mai multe sms-uri din kotlin
Figura 1 - Cum să trimiți mai multe SMS-uri din Kotlin

Exemplul de cod Kotlin pentru SMS de mai jos demonstrează cum puteți trimite mai multe SMS-uri folosind API-ul REST HTTP pentru SMS al Ozeki SMS Gateway, utilizând biblioteca Kotlin Ozeki.Libs.Rest. Această bibliotecă vă este oferită gratuit și o puteți utiliza și modifica în oricare dintre proiectele dumneavoastră.

Video 1 - Cum să descărcați fișierul SendMultipleSms.kt.zip exemplu (Tutorial video)

MainActivity.kt
package send.multiple.sms

import Ozeki.Libs.Rest.Configuration
import Ozeki.Libs.Rest.Message
import Ozeki.Libs.Rest.MessageApi
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.widget.ArrayAdapter
import androidx.appcompat.app.AppCompatActivity
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 btnAddMessage:android.widget.Button = findViewById(R.id.btnAddMessage)
        val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest)
        val listOfMessages:android.widget.ListView = findViewById(R.id.listView)
        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)

        val messages : ArrayList<Message> = arrayListOf()
        val messages_label : ArrayList<String> = arrayListOf()

        val arrayAdapter = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, messages_label)

        listOfMessages.adapter = arrayAdapter

        btnAddMessage.setOnClickListener {
            if (inputToAddress.text.toString() != "" && inputMessage.text.toString() != "" ) {
                val msg = Message()
                msg.ToAddress = inputToAddress.text.toString()
                msg.Text = inputMessage.text.toString()
                inputToAddress.text.clear()
                inputMessage.text.clear()
                messages_label.add(msg.toString())
                arrayAdapter.notifyDataSetChanged()
                messages.add(msg)
            } else {
                logBox.text = String.format("%s\nTrebuie să completați toate câmpurile!", logBox.text)
            }
        }

        btnSendRequest.setOnClickListener {
            messages_label.clear()
            arrayAdapter.notifyDataSetChanged()
            GlobalScope.launch(Dispatchers.IO) {
                val response = api.Send(messages)
                messages.clear()
                logBox.text = String.format("%s\n%s", logBox.text, response.toString())
            }
        }

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

    <TextView
        android:id="@+id/textToAddress"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="Adresă destinatar:"
        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/textMsg"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="Mesaj:"
        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" />

    <EditText
        android:id="@+id/inputToAddress"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:ems="10"
        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="80dp"
        android:layout_marginTop="20dp"
        android:ems="10"
        android:gravity="start|top"
        android:inputType="textMultiLine"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textMsg" />

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Trimite"
        android:backgroundTint="#FF3F3F"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/listView" />

    <Button
        android:id="@+id/btnAddMessage"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:backgroundTint="#FF3F3F"
        android:text="Adaugă"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.505"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/inputMessage" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="320dp"
        android:layout_height="120dp"
        android:layout_marginTop="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnAddMessage" />

    <TextView
        android:id="@+id/logBox"
        android:layout_width="320dp"
        android:layout_height="80dp"
        android:layout_marginTop="20dp"
        android:nestedScrollingEnabled="false"
        android:scrollbars="vertical"
        android:text="Jurnal:"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.494"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnSendRequest" />

</androidx.constraintlayout.widget.ConstraintLayout>
	

Cum să utilizați exemplul Kotlin pentru SMS:

Puteți utiliza clasa Message pentru a crea SMS-ul și puteți utiliza clasa MessageApi pentru a trimite mesajele SMS către gateway-ul SMS. Gateway-ul SMS vă va transmite mesajul către rețeaua mobilă fie printr-o conexiune wireless fie prin Internet.

Descarcă SendMultipleSms.kt

Codul sursă explicat în acest articol poate fi descărcat, utilizat și modificat gratuit.
Descarcă: SendMultipleSms.kt.zip (150Kb)

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

Fișierul SendMultipleSms.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 utilizarea metodelor Send(), Delete(), Mark() și Receive(). (Figura 2)

proiect exemplu pentru trimiterea mai multor SMS folosind Kotlin
Figura 2 - Directorul SendMultipleSms.kt

Cum să trimiți mai multe SMS din Kotlin (Pași rapizi)

Pentru a trimite mai multe SMS din Kotlin:

  1. Instalează Ozeki SMS Gateway
  2. Conectează Ozeki SMS Gateway la rețeaua mobilă
  3. Trimite un SMS de test din interfața Ozeki
  4. Creează un utilizator HTTP API pentru SMS
  5. Android Studio
  6. Descarcă proiectul exemplu de mai sus
  7. Creează SMS-ul prin crearea unui nou obiect Message
  8. Creează un API pentru a trimite mesajele tale
  9. Folosește metoda Send pentru a trimite mesajele tale
  10. Citește mesajul de răspuns în consolă
  11. Verifică jurnalele în SMS Gateway

Instalează Ozeki SMS Gateway și creează un utilizator HTTP API

Pentru a putea trimite SMS din Kotlin, mai întâi trebuie să instalezi Ozeki SMS Gateway. SMS Gateway 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 API pentru SMS. Creează un utilizator cu numele "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 trimite mai multe SMS din Kotlin, aplicația ta Kotlin va trebui să facă o cerere HTTP către SMS Gateway. 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 SMS Gateway-ului tău. 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 trimite mai multe SMS din Kotlin

Pentru a autentifica clientul Kotlin pentru SMS, trebuie să trimiți numele de utilizator și parola într-un șir codificat 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ă codificare:

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 codificat base64: aHR0cF91c2VyOnF3ZTEyMw==. Pentru a trimite

Antetul cererii HTTP pentru a trimite SMS din Kotlin

Pentru a trimite mesajele SMS, trebuie să incluzi următoarele linii ca antete în cererea HTTP. Reține că includem un antet pentru tipul conținutului și un antet de autorizare.

Content-Type: application/json
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
	

Cererea HTTP pentru a trimite SMS din Kotlin

Pentru a trimite SMS-ul, 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 codificat JSON. Acesta conține numărul destinatarului și textul mesajului.

POST /api?action=sendmsg HTTP/1.1
Connection: Keep-Alive
Content-Length: 944
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":	"50fae4db-be52-4a79-905b-d51d1c83351b",
			"to_address":	"+36201111111",
			"text":	"Hello world 3",
			"create_date":	"2021-06-17T13:59:40",
			"valid_until":	"2021-06-24T13:59:40",
			"time_to_send":	"-999999999-01-01T00:00",
			"submit_report_requested":	true,
			"delivery_report_requested":	true,
			"view_report_requested":	true
		},
		{
			"message_id":	"6be6e16f-783e-4a88-ba7c-5f37553ee430",
			"to_address":	"+36202222222",
			"text":	"Hello world 2",
			"create_date":	"2021-06-17T13:59:58",
			"valid_until":	"2021-06-24T13:59:58",
			"time_to_send":	"-999999999-01-01T00:00",
			"submit_report_requested":	true,
			"delivery_report_requested":	true,
			"view_report_requested":	true
		},
		{
			"message_id":	"128495ae-7175-4219-bed5-5da3161e7c1a",
			"to_address":	"+36203333333",
			"text":	"Hello world 1",
			"create_date":	"2021-06-17T14:00:15",
			"valid_until":	"2021-06-24T14:00:15",
			"time_to_send":	"-999999999-01-01T00:00",
			"submit_report_requested":	true,
			"delivery_report_requested":	true,
			"view_report_requested":	true
		}
	]
}
	

Odată ce gateway-ul SMS primește această solicitare, va genera un răspuns HTTP. Răspunsul HTTP va conține un cod de stare, pentru a indica dacă trimiterea SMS-ului a fost reușită sau nu. De asemenea, va returna o structură codificată în JSON pentru a vă 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 13:48:15 GMT
Server: 10/10.3.120
Transfer-Encoding: chunked
{
	"http_code": 200,
	"response_code": "SUCCESS",
	"response_msg": "Messages queued for delivery.",
	"data": {
	  "total_count": 3,
	  "success_count": 3,
	  "failed_count": 0,
	  "messages": [
	    {
	      "message_id": "50fae4db-be52-4a79-905b-d51d1c83351b",
	      "from_station": "%",
	      "to_address": "+36201111111",
	      "to_station": "%",
	      "text": "Hello world 3",
	      "create_date": "2021-06-17 13:59:40",
	      "valid_until": "2021-06-24 13:59:40",
	      "time_to_send": "2021-06-17 13:59:40",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": false,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ],
	      "status": "SUCCESS"
	    },
	    {
	      "message_id": "6be6e16f-783e-4a88-ba7c-5f37553ee430",
	      "from_station": "%",
	      "to_address": "+36202222222",
	      "to_station": "%",
	      "text": "Hello world 2",
	      "create_date": "2021-06-17 13:59:58",
	      "valid_until": "2021-06-24 13:59:58",
	      "time_to_send": "2021-06-17 13:59:58",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": false,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ],
	      "status": "SUCCESS"
	    },
	    {
	      "message_id": "128495ae-7175-4219-bed5-5da3161e7c1a",
	      "from_station": "%",
	      "to_address": "+36203333333",
	      "to_station": "%",
	      "text": "Hello world 1",
	      "create_date": "2021-06-17 14:00:15",
	      "valid_until": "2021-06-24 14:00:15",
	      "time_to_send": "2021-06-17 14:00:15",
	      "submit_report_requested": true,
	      "delivery_report_requested": true,
	      "view_report_requested": false,
	      "tags": [
	        {
	          "name": "Type",
	          "value": "SMS:TEXT"
	        }
	      ],
	      "status": "SUCCESS"
	    }
	  ]
	}
}
	
Cum să trimiți mai multe SMS-uri din 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 SendMultipleSms.kt. După ce ați deschis proiectul exemplu, ați putea observa că există un pachet numit Ozeki.Libs.Rest Acesta este pachetul care conține MessageApi și toate elementele necesare pentru a trimite mai multe SMS-uri folosind Kotlin.

Video 2 - Cum să trimiți mai multe mesaje SMS cu codul Kotlin de mai sus (Tutorial video)

Cum să verificați dacă SMS-ul a fost acceptat de utilizatorul HTTP

După ce SMS-ul a fost trimis, este o idee bună să verificați gateway-ul SMS, pentru a vedea ce a primit. Puteți verifica jurnalul deschizând detaliile utilizatorului HTTP din consola de management Ozeki SMS Gateway. La sfârșitul videoclipului de mai sus puteți vedea cum să verificați dacă solicitarea a fost primită de http_user. (Figura 3)

proiect kotlin pentru trimiterea mai multor mesaje sms
Figura 3 - Proiectul SendMultipleSms.kt în Android Studio

Cum arată utilizarea aplicației pe un telefon virtual

După cum puteți vedea în Figura 4, puteți trimite mai multe mesaje SMS în același timp, folosind aplicația. După ce ați trimis mesajele, puteți vedea un jurnal după textul mesajului. Acolo, puteți obține mai multe informații despre mesajele trimise. Vă va notifica câte dintre toate mesajele trimise au fost trimise cu succes și câte au eșuat. (Figura 4)

aplicație exemplu kotlin pentru trimiterea mai multor sms-uri

Figura 4 - Aplicația exemplu SendMultipleSms înainte și după trimiterea mesajelor

Cum să adăugați Ozeki.Libs.Rest în propriul proiect

Biblioteca Ozeki.Libs.Rest poate fi descărcată, utilizată și modificată gratuit.
Descărcare: Ozeki.Libs.Rest.kt.zip (7.66Kb)

Dacă decideți să vă creați aplicația pe cont propriu doar cu biblioteca Ozeki.Libs.Rest, trebuie să faceți câteva modificări în aplicația de bază. Pentru a utiliza biblioteca Ozeki.Libs.Rest, trebuie să o plasați î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 proiect.

Video 3 - Cum să adăugați 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 includeți.

Adăugarea dependențelor (Tutorial video)

În următorul videoclip, veți învăța cum să adăugați dependențele menționate anterior în proiectul dumneavoastră. Acesta va începe cu copierea codului și vă va ghida până la obținerea dependențelor funcționale. Videoclipul durează doar 53 de secunde, dar cuprinde toți pașii necesari pentru finalizarea procesului. Puteți urmări acest tutorial fără efort

Video 4 - Cum să adăugați dependențele necesare (Tutorial video)

Acces la internet

Pentru a permite aplicației dumneavoastră să trimită o cerere HTTP, trebuie să permiteți aplicației să se conecteze la internet.
În următorul videoclip vă voi arăta cum să activați accesul la internet pentru aplicația dumneavoastră Kotlin.

<uses-permission android:name="android.permission.INTERNET" />
	

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

android:usesCleartextTraffic="true"
	

Codul 3 - Pentru a permite trimiterea cererilor HTTP

Adăugarea conexiunii la internet în proiect (Tutorial video)

Trebuie să adăugați ambele linii în fișierul AndroidManifest.xml.
În următorul videoclip vă voi arăta unde trebuie plasate codurile de mai sus. Trebuie să adăugați ambele linii în fișierul AndroidManifest.xml. Videoclipul va începe cu copierea codului și vă va ghida până la obținerea unei conexiuni la internet funcționale. Acest videoclip este foarte ușor de urmărit, dar cuprinde toți pașii necesari într-un mod detaliat.

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

Pentru a rezuma

Acest articol vă ajută să configurați un API HTTP SMS în Ozeki SMS Gateway și să utilizați codul Kotlin furnizat pentru a trimite mai multe mesaje SMS. Această soluție este perfectă dacă trebuie să transmiteți un mesaj important mai multor clienți cât mai rapid posibil. Este benefic să folosiți această soluție în aplicația dumneavoastră Kotlin pentru a avea un sistem de partajare a informațiilor de înaltă performanță.

Mai multe informații despre acest subiect pot fi găsite pe pagina web Ozeki. Continuați citirea cu articolul intitulat Cum să programați un SMS în Kotlin.

Descărcați acum Ozeki SMS Gateway și începeți să vă dezvoltați afacerea!

More information