Kako poslati več SMS sporočil iz Kotlina

Najenostavnejši način za pošiljanje SMS sporočil iz Kotlina je uporaba vgrajenega HTTP/Rest SMS API-ja Ozeki SMS Gateway. Ko uporabljate ta API, boste SMS sporočila pošiljali z izdajo HTTP Post zahteve do SMS prehoda. HTTP Post zahteva bo vsebovala sporočilo v json formatu. SMS prehod bo poslal to SMS sporočilo prejemnikovemu telefonu in vrnil HTTP 200 OK odgovor na vašo zahtevo. (Slika 1)

kako poslati več SMS sporočil iz Kotlina
Slika 1 - Kako poslati več SMS sporočil iz Kotlina

Spodnji vzorec kode Kotlin za SMS prikazuje, kako lahko pošljete več SMS sporočil 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 ter spreminjate v katerem koli od svojih projektov.

Video 1 - Kako prenesti SendMultipleSms.kt.zip primer (Video vadnica)

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\nIzpolniti morate vsa polja!", 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="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/textMsg"
        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" />

    <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="Pošlji"
        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="Dodaj"
        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="Dnevniki:"
        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>
	

Kako uporabiti primer Kotlin SMS:

Uporabite lahko razred Message za ustvarjanje SMS sporočil in razred MessageApi za pošiljanje SMS sporočil 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: SendMultipleSms.kt.zip (150Kb)

Kaj je v datoteki SendMultipleSms.kt.zip?

Datoteka SendMultipleSms.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)

primer projekta za pošiljanje več SMS sporočil s Koltinom
Slika 2 - Map SendMultipleSms.kt

Kako poslati več SMS sporočil iz Kotlina (Hitri koraki)

Za pošiljanje več SMS sporočil iz Kotlina:

  1. Namestite Ozeki SMS Gateway
  2. Povežite Ozeki SMS Gateway z mobilnim omrežjem
  3. Pošljite testno SMS sporočilo iz Ozeki GUI
  4. Ustvarite uporabnika HTTP SMS API
  5. Android Studio
  6. Prenesite zgornji primer projekta
  7. Ustvarite SMS z ustvarjanjem novega objekta Message
  8. Ustvarite API za pošiljanje vaših sporočil
  9. Uporabite metodo Send za pošiljanje vaših sporočil
  10. Preberite odzivno sporočilo na konzoli
  11. Preverite dnevnike v SMS gatewayu
Namestite Ozeki SMS Gateway in ustvarite uporabnika HTTP API

Za pošiljanje SMS sporočil iz Kotlina morate najprej namestiti Ozeki SMS Gateway. SMS gateway lahko namestite na isti računalnik, 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 za pripravo 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 Kotlina

Za pošiljanje več SMS sporočil 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, je to lahko 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
	
HTTP avtentikacija za pošiljanje več SMS sporočil iz Kotlina

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

HTTP glava zahteve za pošiljanje SMS iz Kotlina

Za 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==
	
HTTP zahteva za pošiljanje SMS iz Kotlina

Za oddajo SMS bo vaša Kotlin aplikacija poslala HTTP zahtevo, podobno spodnji. Upoštevajte, da ta zahteva vsebuje del HTTP glave in del HTTP telesa. HTTP telo je JSON kodiran podatkovni niz. Vsebuje prejemnikovo številko in besedilo sporočila.

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

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-a uspešna ali ne. Prav tako bo vrnil strukturo, kodirano v JSON, ki vam bo zagotovila koristne 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 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"
	    }
	  ]
	}
}
	

Kako poslati več SMS-ov iz Kotlina z uporabo SMS API-ja in zgornjega primera projekta (Video vadnica)

Ta video vam pokaže, kako prenesti in uporabiti projekt SendMultipleSms.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 več SMS-ov s Kotlinom.

Video 2 - Kako poslati več SMS sporočil z zgornjo kodo Kotlin (Video vadnica)

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 bila prejeta s strani http_user. (Slika 3)

kotlin projekt za pošiljanje več SMS sporočil
Slika 3 - Projekt SendMultipleSms.kt v Android Studiu

Kako izgleda uporaba aplikacije na virtualnem telefonu

Kot lahko vidite na Sliki 4, lahko s aplikacijo pošljete več SMS sporočil hkrati. Po pošiljanju sporočil lahko vidite dnevnik po besedilu sporočila. Tam lahko dobite več informacij o poslanih sporočilih. Obvestilo vam bo pokazalo, koliko od vseh poslanih sporočil je bilo uspešno poslanih in koliko jih je spodletelo. (Slika 4)

primer kotlin aplikacije za pošiljanje več SMS-ov

Slika 4 - Primer aplikacije SendMultipleSms pred in po pošiljanju sporočil

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, da boste svojo aplikacijo ustvarili sami le s knjižnico Ozeki.Libs.Rest, je nekaj stvari, ki jih morate spremeniti v svoji osnovni aplikaciji. 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.

Video 3 - Kako dodati knjižnico Ozeki.Libs.Rest v svoj projekt (Video vadnica)

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'
	

Koda 1 - Seznam odvisnosti, ki jih morate vključiti.

Dodajanje odvisnosti (Video vadnica)

V naslednjem videoposnetku se boste naučili, kako dodati prej omenjene odvisnosti v vaš projekt. Začelo se bo s kopiranjem kode in vas popelje vse do delujočih odvisnosti. Video je dolg le 53 sekund, vsebuje pa vse potrebne korake za dokončanje postopka. To vadnico lahko brez težav sledite.

Video 4 - Kako dodati potrebne odvisnosti (Video vadnica)

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 videoposnetku vam bom pokazal, kako omogočiti dostop do interneta za vašo aplikacijo v Kotlinu.

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

Koda 2 - Za omogočanje dostopa do interneta za vašo aplikacijo v Kotlinu.

android:usesCleartextTraffic="true"
	

Koda 3 - Za omogočanje pošiljanja HTTP zahtev

Dodajanje internetne povezave v projekt (Video vadnica)

Obe vrstici morate dodati v datoteko AndroidManifest.xml.
V naslednjem videoposnetku vam bom pokazal, kam naj postavite zgornjo kodo. Obe vrstici morate dodati v datoteko AndroidManifest.xml. Video se bo začel s kopiranjem kode in vas popelje do delujoče internetne povezave. Ta video je zelo enostaven za sledenje, vsebuje pa vse potrebne korake na podroben način.

Video 5 - Kako omogočiti dostop do interneta za vašo aplikacijo (Video vadnica)

Za povzetek

Ta članek vam pomaga nastaviti HTTP SMS API v Ozeki SMS Gateway in uporabiti dano kodo v Kotlinu za pošiljanje več SMS sporočil. Ta rešitev je idealna, če morate hitro posredovati pomembno sporočilo več strankam. Koristno je uporabiti to rešitev v vaši aplikaciji v Kotlinu, da boste imeli visoko zmogljiv sistem za izmenjavo informacij.

Več informacij o tej temi najdete na spletni strani Ozeki. Nadaljujte z branjem članka z naslovom Kako načrtovati SMS v Kotlinu.

Zdaj prenesite Ozeki SMS Gateway in začnite razvijati svoje poslovanje!

More information