Hogyan kapjunk SMS-t Kotlinban

A legegyszerűbb módja az SMS küldésének Kotlinból az Ozeki SMS Gateway beépített HTTP/Rest SMS API-jának használata. Amikor ezt az API-t használod, SMS üzeneteket küldhetsz HTTP POST kérések kiadásával az SMS gateway felé. A HTTP POST kérés egy JSON formátumban formázott üzenetet fog tartalmazni. Az SMS gateway elküldi ezt az SMS-t a címzett telefonszámára, és egy HTTP 200 OK választ küld vissza a kérésedre. (1. ábra)

hogyan kapjunk sms-t kotlinban
1. ábra - Hogyan kapjunk SMS-t Kotlinban

Kotlin kód SMS fogadására mobilra

Az alábbi Kotlin SMS kód minta bemutatja, hogyan fogadhatsz SMS üzenet(ek)et az Ozeki SMS Gateway http rest sms API-jával, az Ozeki.Libs.Rest könyvtár segítségével. Ez a könyvtár ingyenesen elérhető számodra, és bármely projektben felhasználhatod és módosíthatod.

1. videó - Hogyan töltsd le a ReceiveSms.kt.zip példát (Videó útmutató)

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="Bejövők letöltése"
        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="Üzenetek"
        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>
	

A Kotlin SMS példa használata:

A MessageApi osztály segítségével fogadhatsz SMS üzenet(ek)et az SMS gateway-től. A kérésed az eszközödről az interneten keresztül továbbítódik az SMS gateway felé.

ReceiveSms.kt letöltése

A cikkben ismertetett forráskód ingyenesen letölthető, felhasználható és módosítható.
Letöltés: ReceiveSms.kt.zip (148Kb)

Mi található a ReceiveSms.kt.zip fájlban?

A ReceiveSms.kt.zip fájl egy példaprojektet tartalmaz, amelyben megtalálható az Ozeki.Libs.Rest könyvtár. Ezzel a könyvtárral küldhetsz, törölhetsz, megjelölhetsz és fogadhatsz SMS üzeneteket egy MessageApi létrehozásával, és a Send(), Delete(), Mark(), valamint Receive() metódusok használatával. (2. ábra)

példaprojekt sms fogadására kotlinban
2. ábra - ReceiveSms.kt könyvtárstruktúra

Hogyan fogadjunk SMS-t Kotlinban (Gyors lépések)

SMS fogadásához Kotlinban:

  1. Telepítsd az Ozeki SMS Gateway-t
  2. Kapcsold össze az Ozeki SMS Gateway-t a mobil hálózattal
  3. Küldj egy teszt SMS-t az Ozeki grafikus felületéről
  4. Hozz létre egy HTTP SMS API felhasználót
  5. Android Studio
  6. Töltsd le a fenti példaprojektet
  7. Hozz létre egy API-t a bejövő üzeneteid letöltéséhez
  8. Használd a DownloadIncoming() metódust az üzeneteid fogadásához
  9. Olvasd el a válaszüzenetet a konzolon
  10. Ellenőrizd a naplókat az SMS gateway-ben

Ozeki SMS Gateway telepítése és HTTP API felhasználó létrehozása

Ahhoz, hogy SMS-t fogadhass Kotlinban, először telepítened kell az Ozeki SMS Gateway-t. Az SMS gateway telepíthető ugyanarra a számítógépre, ahol az Android Studioban fejleszted a Kotlin kódodat. A telepítés után a következő lépés az Ozeki SMS Gateway mobil hálózathoz való csatlakoztatása. Küldhetsz egy teszt SMS-t az Ozeki grafikus felületéről annak ellenőrzésére, hogy a mobil hálózati kapcsolatod működik-e. A környezet előkészítésének utolsó lépése egy HTTP SMS API felhasználó létrehozása. Hozz létre egy felhasználót "http_user" felhasználónévvel és "qwe123" jelszóval, hogy a példa módosítás nélkül működjön.

Miután a környezet be van állítva, futtathatod a Kotlin kódodat.

HTTP API URL SMS küldéséhez Kotlinból

Ahhoz, hogy SMS-t fogadhass Kotlinban, a Kotlin kódodnak HTTP kérést kell küldenie az SMS gateway felé. Az API URL az alábbiakban látható. Fontos, hogy az IP cím (127.0.0.1) helyére az SMS gateway IP címét írd be. Ha az Ozeki SMS Gateway ugyanarra a számítógépre van telepítve, ahol a JavaScript SMS alkalmazás fut, ez lehet 127.0.0.1. Ha másik számítógépre van telepítve, akkor annak az IP címét kell megadni.

http://127.0.0.1:9509/api?action=rest
	

HTTP hitelesítés SMS fogadásához Kotlinban

A Kotlin SMS kliens hitelesítéséhez a felhasználónevet és a jelszót egy base64 kódolt sztringben kell elküldened a szervernek egy HTTP kérésben. A használt formátum: base64(felhasználónév+":"+jelszó). Kotlinban a következő kóddal végezheted el ezt a kódolást:

var usernamePassword = "%s:%s".format(username, password)
return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
	

Például, ha a 'http_user' felhasználónevet és a 'qwe123' jelszót kódolod, a következő base64 kódolt sztringet kapod: aHR0cF91c2VyOnF3ZTEyMw==.

HTTP kérés fejléc SMS küldéséhez Kotlinból

Az SMS üzenet(ek) fogadásához a következő sorokat kell tartalmaznia a HTTP kérés fejlécének. Figyelj arra, hogy tartalomtípust és egy Authorization fejlécet is tartalmazunk.

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

HTTP kérés SMS fogadásához Kotlinban

A bejövő SMS üzenet(ek) fogadásához a Kotlin alkalmazásod egy ehhez hasonló HTTP kérést fog küldeni. Figyelj rá, hogy ez a kérés tartalmaz egy HTTP fejléc részt és egy HTTP törzs részt. A HTTP törzs egy JSON kódolt adatsztring. Tartalmazza a címzett számát és az üzenet szövegét.

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
	

HTTP válasz, amit a Kotlin SMS példa kap

Amint az SMS gateway megkapja ezt a kérést, generál egy HTTP választ. A HTTP válasz tartalmaz egy státuszkódot, amely jelzi, hogy az SMS beküldési kérés sikeres volt-e vagy sem. Ezen kívül egy JSON kódolt struktúrát is visszaad, amely hasznos információkat nyújt az üzenet beküldéséről.

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

Hogyan fogadjunk SMS üzeneteket Kotlinban az SMS API és a fenti példaprojekt segítségével (Videó útmutató)

Ez a videó bemutatja, hogyan töltsd le és használd a ReceiveSms.kt projektet. Miután megnyitottad a példaprojektet, észreveheted, hogy van egy Ozeki.Libs.Rest nevű csomag. Ez a csomag tartalmazza a MessageApi-t és minden szükséges eszközt, amellyel SMS üzenet(ek)et fogadhatsz Kotlinban.

2. videó - Hogyan fogadjunk SMS üzenet(ek)et a fenti Kotlin kóddal (Videó útmutató)

Hogyan ellenőrizzük, hogy a kérést fogadta-e az HTTP felhasználó

Az SMS beküldése után érdemes ellenőrizni az SMS gateway-t, hogy lássuk, mit kapott. A naplót az Ozeki SMS Gateway kezelőfelületén az HTTP felhasználó részleteinek megnyitásával ellenőrizheted. A fenti videó végén láthatod, hogyan ellenőrizheted, hogy a kérést fogadta-e a http_user. (3. ábra)

kotlin projekt sms üzenetek fogadására
3. ábra - ReceiveSms.kt projekt az Android Studioban

Hogyan néz ki az alkalmazás használata telefonon (videó útmutató)

A 4. ábrán láthatod, hogyan néz ki az alkalmazás használata telefonon. Amint láthatod a Korábbi képen, alapértelmezés szerint nincsenek bejövő üzeneteid. Nyomd meg a 'Bejövők letöltése' gombot az üzeneteid lekéréséhez. Az Utáni képen láthatod, hogy az üzenet összes információja látható, miután letöltötted.

példa kotlin alkalmazás sms üzenetek fogadására

4. ábra - ReceiveSms példaalkalmazás az üzenetek letöltése előtt és után

Hogyan adjuk hozzá az Ozeki.Libs.Rest-et a saját projekthez

Az Ozeki.Libs.Rest könyvtár ingyenesen letölthető, felhasználható és módosítható.
Letöltés: Ozeki.Libs.Rest.kt.zip (7.66Kb)

Ha úgy döntesz, hogy saját magad hozod létre az alkalmazásodat csak az Ozeki.Libs.Rest könyvtárral, néhány dolgot módosítanod kell az alap alkalmazásban. Az Ozeki.Libs.Rest könyvtár használatához a fő könyvtár java mappájába kell elhelyezned
A következő videóban megmutatom, hogyan töltsd le és add hozzá az Ozeki.Libs.Rest könyvtárat a saját projektedhez.

3. videó - Hogyan adjuk hozzá az Ozeki.Libs.Rest könyvtárat a saját alkalmazásunkhoz (Videó útmutató)

Függőségek

Fontos megemlíteni, hogy az Ozeki.Libs.Rest könyvtárnak vannak függőségei. Ahhoz, hogy használhasd, ezeket a függőségeket be kell írnod a Gradle Scripts-be.

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'
	

1. kód - A beillesztendő függőségek listája.

Függőségek hozzáadása (Videó útmutató)

A következő videóban látni fogod, hogyan csatolhatod a korábban említett függőségeket. A videó a kód másolásával kezdődik, és elvezet a sikeresen hozzáadott függőségekig. A videó mindössze 53 másodperc hosszú, de tartalmazza az összes szükséges lépést a módszer elvégzéséhez. Könnyedén követheted ezt az útmutatót.

4. videó - Hogyan adjuk hozzá a szükséges függőségeket (Videó útmutató)

Internet hozzáférés

Ahhoz, hogy az alkalmazásod képes legyen HTTP kérést küldeni, engedélyezned kell az internethez való csatlakozást.
A következő videóban megmutatom, hogyan engedélyezheted az internet hozzáférést a Kotlin alkalmazásod számára.

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

2. kód - Az internet hozzáférés engedélyezése a Kotlin alkalmazásod számára.

android:usesCleartextTraffic="true"
	

3. kód - HTTP kérések küldésének engedélyezése

Hogyan adjunk internet kapcsolatot a projekthez (Videó útmutató)

Mindkét sort be kell illesztened az AndroidManifest.xml fájlba.
A következő videóban megmutatom, hová kell beillesztened a fenti kódokat. A videó a kód másolásával kezdődik, és elvezet a sikeresen hozzáadott internet kapcsolathoz. Ez a videó pontos és könnyen követhető.

5. videó - Hogyan engedélyezzük az internet hozzáférést az alkalmazásunk számára (Videó útmutató)

Összegzés

Ez az útmutató az SMS fogadásának lépéseit mutatja be Kotlinban az Ozeki SMS Gateway HTTP felhasználójának használatával. Ez a megoldás segít összegyűjteni az Inbox mappában fogadott üzeneteidet és átvinni őket a Kotlin programodba. Ennek a megoldásnak a használatával lehetőséged van a terveid szerint megtartani az üzenetküldő rendszeredet.

Ez csak a kezdet, többet tudhatsz meg az üzeneteid kezeléséről az Ozeki weboldalán. A hatékonyság és a naprakészség érdekében rendezd az üzeneteidet, olvasd el a következő cikket Hogyan töröljünk SMS-t Kotlinban.

Lássunk munkához, telepítsd most az Ozeki SMS Gateway-t!

More information