Cum să trimiți SMS din 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 transmiterea 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 sms din kotlin
Figura 1 - Cum să trimiți SMS din Kotlin

Exemplul de cod Kotlin pentru SMS de mai jos demonstrează cum puteți trimite SMS 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 exemplul SendSms.kt.zip (Tutorial video)

MainActivity.kt
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",
            apiurl = "http://10.0.2.2:9509/api"
        )

        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())
                }
            }
        }
    }
}
	
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="send.sms.MainActivity">

    <Button
        android:id="@+id/btnSendRequest"
        android:layout_width="320dp"
        android:layout_height="50dp"
        android:layout_marginBottom="24dp"
        android:text="Trimite"
        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="Salut lume!"
        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="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" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="320dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="40dp"
        android:text="Către Adresă:"
        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="Jurnal:"
        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>
	

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 SMS-ul către gateway-ul SMS. Gateway-ul SMS va transmite mesajul dumneavoastră către rețeaua mobilă fie printr-o conexiune wireless fie prin Internet.

Descarcă SendSms.kt

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

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

Fișierul SendSms.kt.zip conține proiectul exemplu, care include biblioteca Ozeki.Libs.Rest. Cu această bibliotecă, puteț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 trimitere sms folosind node js
Figura 2 - Directorul SendSms.kt

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

Pentru a trimite SMS din Kotlin:

  1. Instalați Ozeki SMS Gateway
  2. Conectați Ozeki SMS Gateway la rețeaua mobilă
  3. Trimiteți un SMS de test din interfața Ozeki
  4. Creați un utilizator API HTTP pentru SMS
  5. Instalați Android Studio
  6. Descărcați proiectul exemplu de mai sus
  7. Creați SMS-ul prin crearea unui nou obiect Message
  8. Creați un API pentru a trimite mesajul
  9. Utilizați metoda Send pentru a trimite mesajul
  10. Citiți mesajul de răspuns în consolă
  11. Verificați jurnalele în SMS Gateway

Instalați Ozeki SMS Gateway și creați un utilizator API HTTP

Pentru a putea trimite SMS din Kotlin, mai întâi trebuie să instalați Ozeki SMS Gateway. SMS Gateway poate fi instalat pe același computer unde dezvoltați codul Kotlin în Android Studio. După instalare, următorul pas este să conectați Ozeki SMS Gateway la rețeaua mobilă. Puteți creați un utilizator API HTTP pentru SMS. Creați 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, puteți rula codul Kotlin.

URL API HTTP pentru a trimite SMS din Kotlin

Pentru a trimite SMS din Kotlin, codul Kotlin va trebui să trimită o cerere HTTP către SMS Gateway. URL-ul API este afișat mai jos. Rețineți că adresa IP (127.0.0.1) ar trebui să fie înlocuită cu adresa IP a SMS Gateway-ului dvs. Dacă Ozeki SMS Gateway este instalat pe același computer unde rulează aplicația JavaScript pentru SMS, aceasta 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
	

Autentificare HTTP pentru a trimite SMS din Kotlin

Pentru a autentifica clientul SMS Kotlin, trebuie să trimiteți numele de utilizator și parola într-un șir codificat base64 către server într-o cerere HTTP. Formatul utilizat este: base64(nume_utilizator+":"+parolă). În Kotlin puteți utiliza 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ă codificați numele de utilizator 'http_user' și parola 'qwe123', veți obține următorul șir codificat base64: aHR0cF91c2VyOnF3ZTEyMw==. Pentru a trimite

Antet cerere HTTP pentru a trimite SMS din Kotlin

Pentru a trimite mesajele SMS, trebuie să includeți următoarele linii ca antete în cererea HTTP. Rețineți că includem un antet Content-Type și un antet Authorization.

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

Cerere HTTP pentru a trimite SMS din Kotlin

Pentru a trimite SMS-ul, aplicația Kotlin va trimite o cerere HTTP similară cu cea de mai jos. Rețineți că această cerere conține o parte de antet HTTP și o parte de corp HTTP. Corpul HTTP este un șir de date codificat JSON. Acesta conține numărul destinatarului și textul mesajelor.

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

Răspuns HTTP primit de exemplul Kotlin pentru SMS

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 avut succes 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: Wed, 16 Jun 2021 09:06:03 GMT
Server: 10/10.3.120
Transfer-Encoding: chunked

{
	"http_code": 200,
	"response_code": "SUCCESS",
	"response_msg": "Messages queued for delivery.",
	"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"
	    }
	  ]
	}
}
	

Cum să trimiți SMS 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 SendSms.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 tot ce aveți nevoie pentru a trimite un SMS folosind Kotlin.

Video 2 - Cum să trimiți 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 dvs. 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)

kotlin project to send sms message
Figura 3 - Proiectul SendSms.kt în Android Studio

Cum arată utilizarea aplicației

În Figura 4, puteți vedea cum arată aplicația după ce ați trimis un mesaj cu ea. După cum puteți vedea, mesajele dvs. trimise anterior vor fi stocate ca un jurnal sub caseta de text 'Message'. Puteți vedea toate informațiile despre mesaj, cum ar fi expeditorul, textul și rezultatul procedurii de trimitere.

example kotlin application to send sms
Figura 4 - Aplicația exemplu SendSms înainte și după ce mesajul a fost trimis

Cum să verificați dacă SMS-ul a fost trimis către rețeaua mobilă

Ultimul pas în verificarea procedurii este să verificați jurnalele conexiunii la rețeaua mobilă. S-ar putea să fie nevoie să activați înregistrarea în configurația conexiunii înainte de a trimite mesajul pentru a vedea jurnalele. Dacă înregistrarea este activată, veți vedea numărul de telefon și textul mesajului pe care l-ați trimis.

Video 3 - Cum să testați dacă clientul SMPP a primit solicitarea noastră (Tutorial video)

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 dvs. 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 4 - 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 Scripturile Gradle.

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. Vom începe cu copierea codului și vă vom ghida până la adăugarea cu succes a dependențelor. Videoclipul durează doar 53 de secunde, dar cuprinde toți pașii necesari pentru a finaliza procesul. Puteți urmări acest tutorial fără efort.

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

Acces la internet

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

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

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

android:usesCleartextTraffic="true"
	

Codul 3 - Pentru a permite trimiterea cererilor HTTP

Cum să activați conexiunea la internet pentru aplicația dvs. (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. Videoclipul va începe cu copierea codului și vă va ghida până la activarea cu succes a conexiunii la internet. Acest videoclip este detaliat și ușor de urmărit.

Video 6 - Cum să permiteți accesul la internet pentru aplicația dvs. (Tutorial video)

Concluzie

Scopul acestui ghid a fost să vă arate cum să trimiteți mesaje SMS din Kotlin folosind API-ul HTTP SMS al Ozeki SMS Gateway. Cunoștințele acumulate vă oferă posibilitatea de a rămâne în contact cu clienții folosind un simplu cod Kotlin. De asemenea, mesageria internațională este posibilă cu Ozeki SMS Gateway, deoarece funcționează în orice țară și poate trimite și primi SMS prin diverse conexiuni mobile.

Asigurați-vă că continuați studiile aici, vizitați alte pagini de tutoriale pe site-ul Ozeki pentru mai multe informații. Consultați mai multe ghiduri despre utilizarea Kotlin, începeți cu Cum să trimiteți mai multe SMS din Kotlin.

Acum, primul lucru pe care trebuie să-l faceți este să descărcați Ozeki SMS Gateway și să începeți să-l folosiți!

More information