Kako poslati SMS iz Kotlina

Najenostavnejši način za pošiljanje SMS-ov 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 ta SMS prejemniku na telefon in vrnil HTTP 200 OK odgovor na vašo zahtevo. (Slika 1)

kako poslati sms iz kotlina
Slika 1 - Kako poslati SMS iz Kotlina

Spodnji vzorec kode Kotlin za SMS prikazuje, kako lahko pošiljate SMS 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 in spreminjate v katerem koli od svojih projektov.

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

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="Pošlji"
        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="Pozdravljen svet!"
        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="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" />

    <TextView
        android:id="@+id/textView2"
        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.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="Dnevnik:"
        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>
	

Kako uporabljati primer Kotlin SMS:

Uporabite lahko razred Message za ustvarjanje SMS in razred MessageApi lahko uporabite za pošiljanje SMS 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: SendSms.kt.zip (148Kb)

Kaj vsebuje datoteka SendSms.kt.zip?

Datoteka SendSms.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 sms z uporabo node js
Slika 2 - Mapnik SendSms.kt

Kako poslati SMS iz Kotlina (Hitri koraki)

Za pošiljanje SMS iz Kotlina:

  1. Namestite Ozeki SMS Gateway
  2. Povežite Ozeki SMS Gateway z mobilnim omrežjem
  3. Pošljite testni SMS 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šega sporočila
  9. Uporabite metodo Send za pošiljanje vašega sporočila
  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 iz Kotlina morate najprej namestiti Ozeki SMS Gateway. SMS gateway lahko namestite na istem računalniku, kjer razvijate svojo Kotlin kodo v Android Studiu. Po namestitvi je naslednji korak povezovanje Ozeki SMS Gateway z mobilnim omrežjem. Lahko pošljete testni SMS iz Ozeki GUI, da preverite, ali vaša mobilna omrežna povezava 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 SMS iz Kotlina bo vaš Kotlin moral poslati HTTP zahtevo k SMS gatewayu. 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, lahko to je 127.0.0.1. Če je nameščen na drugem računalniku, mora biti IP naslov tega računalnika.

http://127.0.0.1:9509/api?action=rest
	
HTTP avtentikacija za pošiljanje SMS 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 dobili 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 tip vsebine in avtorizacijsko glavo.

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 številko prejemnika in besedilo sporočil.

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

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 uspešna ali ne. Vrnil bo tudi 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: 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"
	    }
	  ]
	}
}
	

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

Ta video vam pokaže, kako prenesti in uporabiti projekt SendSms.kt. Ko odprete primer projekta, boste morda opazili, da obstaja paket z imenom Ozeki.Libs.Rest. To je paket, ki vsebuje MessageApi in vse, kar potrebujete za pošiljanje SMS-ov s Kotlinom.

Video 2 - Kako poslati SMS s kodo Kotlin zgoraj (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 v konzoli za upravljanje Ozeki SMS prehoda. Na koncu zgornjega videa lahko vidite, kako preveriti, ali je zahteva bila prejeta od http_userja. (Slika 3)

kotlin projekt za pošiljanje sms sporočila
Slika 3 - Projekt SendSms.kt v Android Studiu

Kako izgleda uporaba aplikacije

Na sliki 4 lahko vidite, kako izgleda aplikacija, ko z njo pošljete sporočilo. Kot lahko vidite, bodo vaša prej poslana sporočila shranjena kot dnevnik pod besedilnim poljem 'Sporočilo'. Vidite lahko vse informacije o sporočilu, kot so pošiljatelj, besedilo in rezultat postopka pošiljanja.

primer kotlin aplikacije za pošiljanje sms
Slika 4 - Primer aplikacije SendSms pred in po pošiljanju sporočila

Kako preveriti, ali je SMS poslan v mobilno omrežje

Zadnji korak pri preverjanju postopka je pogledati dnevnike povezave z mobilnim omrežjem. Morda boste morali vklopiti beleženje v konfiguraciji povezave, preden pošljete sporočilo, da vidite dnevnike. Če je beleženje omogočeno, boste videli telefonsko številko in besedilo sporočila, ki ste ga poslali.

Video 3 - Kako preizkusiti, ali je SMPP odjemalec prejel našo zahtevo (Video vadnica)

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 ustvariti svojo aplikacijo sami le s knjižnico Ozeki.Libs.Rest, morate v osnovni aplikaciji spremeniti nekaj stvari. 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 4 - Kako dodati knjižnico Ozeki.Libs.Rest v svojo aplikacijo (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 videu se boste naučili, kako dodati prej omenjene odvisnosti. Začelo se bo s kopiranjem kode in vas popelje vse do uspešno dodanih odvisnosti. Video je dolg le 53 sekund, vsebuje pa vse potrebne korake za dokončanje postopka. To vadnico lahko brez težav sledite.

Video 5 - Kako dodati potrebne odvisnosti (Video vadnica)

Dostop do interneta

Da bo vaša aplikacija lahko pošiljala HTTP zahteve, morate omogočiti, da se vaša aplikacija poveže z internetom.
V naslednjem videu 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

Kako omogočiti internetno povezavo za vašo aplikacijo (Video vadnica)

Obe vrstici morate dodati v datoteko AndroidManifest.xml.
V naslednjem videu vam bom pokazal, kam naj postavite zgornjo kodo. Video se bo začel s kopiranjem kode in vas popelje do uspešno dodane internetne povezave. Ta video je podroben in omogoča enostavno sledenje.

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

Zaključek

Namen tega vodnika je bil pokazati, kako poslati SMS sporočila iz Kotlina z uporabo HTTP SMS API-ja Ozeki SMS Gateway. To znanje, ki ste se ga naučili, vam omogoča, da ostanete v stiku s svojimi strankami s preprosto kodo v Kotlinu. Mednarodno sporočanje je mogoče tudi z Ozeki SMS Gateway, saj deluje v kateri koli državi in lahko pošilja ter prejema SMS prek različnih mobilnih povezav.

Poskrbite, da nadaljujete s študijem tukaj, obiščite druge strani z vadnicami na spletnem mestu Ozeki za več informacij. Oglejte si več vodnikov o uporabi Kotlina, začnite z Kako poslati več SMS sporočil iz Kotlina.

Zdaj je prva stvar, ki jo morate storiti, prenesti Ozeki SMS Gateway in ga začeti uporabljati!

More information