Jak odbierać SMS w Kotlinie
Najprostszym sposobem wysyłania SMS-ów z Kotlina jest użycie wbudowanego interfejsu HTTP/Rest SMS API Ozeki SMS Gateway. Kiedy używasz tego API, będziesz wysyłać wiadomości SMS poprzez wysłanie żądania HTTP Post do bramki SMS. Żądanie HTTP Post będzie zawierać wiadomość sformatowaną w formacie json. Bramka SMS wyśle tę wiadomość SMS na telefon odbiorcy i zwróci odpowiedź HTTP 200 OK na twoje żądanie. (Rysunek 1)
Kod Kotlin do odbierania SMS-ów na telefon
Poniższy przykładowy kod SMS w Kotlinie demonstruje, jak możesz odbierać wiadomości SMS przy użyciu interfejsu HTTP REST SMS API Ozeki SMS Gateway z biblioteką Kotlin Ozeki.Libs.Rest. Ta biblioteka jest dostarczana bezpłatnie i możesz jej używać oraz modyfikować w dowolnym z twoich projektów.
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() } } }
<?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="Pobierz przychodzące" 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="Wiadomości" 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>
Jak używać przykładu SMS w Kotlinie:
Możesz użyć klasy MessageApi, aby odbierać wiadomości SMS z bramki SMS. Twoje żądanie z urządzenia zostanie przekazane do bramki SMS przez internet.
Pobierz ReceiveSms.kt
Kod źródłowy omówiony w tym artykule można pobrać, używać i modyfikować bezpłatnie.
Pobierz: ReceiveSms.kt.zip (148Kb)
Co znajduje się w pliku ReceiveSms.kt.zip?
Plik ReceiveSms.kt.zip zawiera przykładowy projekt, który ma w sobie bibliotekę Ozeki.Libs.Rest. Dzięki tej bibliotece możesz wysyłać, usuwać, oznaczać i odbierać wiadomości SMS, tworząc MessageApi i używając metod Send(), Delete(), Mark() i Receive(). (Rysunek 2)
Jak odbierać SMS-y w Kotlinie (Szybkie kroki)
Aby odbierać SMS-y w Kotlinie:
- Zainstaluj Ozeki SMS Gateway
- Podłącz Ozeki SMS Gateway do sieci komórkowej
- Wyślij testowego SMS-a z interfejsu Ozeki
- Utwórz użytkownika HTTP SMS API
- Android Studio
- Pobierz przykładowy projekt powyżej
- Utwórz API do pobierania przychodzących wiadomości
- Użyj metody DownloadIncoming() do odbierania wiadomości
- Odczytaj odpowiedź w konsoli
- Sprawdź logi w bramce SMS
Zainstaluj Ozeki SMS Gateway i utwórz użytkownika HTTP API
Aby móc odbierać SMS-y za pomocą Kotlina, najpierw musisz zainstalować Ozeki SMS Gateway. Bramka SMS może być zainstalowana na tym samym komputerze, na którym tworzysz swój kod Kotlina w Android Studio. Po instalacji kolejnym krokiem jest podłączenie Ozeki SMS Gateway do sieci komórkowej. Możesz utworzenie użytkownika HTTP SMS API. Utwórz użytkownika z nazwą "http_user" i hasłem "qwe123", aby przykład działał bez modyfikacji.
Po skonfigurowaniu środowiska możesz uruchomić swój kod Kotlina.
URL API HTTP do wysyłania SMS-ów z Kotlina
Aby odbierać SMS-y za pomocą Kotlina, Twój kod Kotlina będzie musiał wysłać żądanie HTTP do bramki SMS. URL API jest pokazany poniżej. Pamiętaj, że adres IP (127.0.0.1) powinien zostać zastąpiony adresem IP Twojej bramki SMS. Jeśli Ozeki SMS Gateway jest zainstalowany na tym samym komputerze, na którym działa aplikacja SMS w JavaScript, może to być 127.0.0.1. Jeśli jest zainstalowany na innym komputerze, powinien to być adres IP tego komputera.
http://127.0.0.1:9509/api?action=rest
Uwierzytelnianie HTTP do odbierania SMS-ów z Kotlina
Aby uwierzytelnić klienta SMS w Kotlinie, musisz wysłać nazwę użytkownika i hasło w zakodowanym ciągu base64 do serwera w żądaniu HTTP. Używany format to: base64(nazwa_użytkownika+":"+hasło). W Kotlinie możesz użyć następującego kodu do wykonania tego kodowania:
var usernamePassword = "%s:%s".format(username, password) return "Basic %s".format(Base64.getEncoder().encodeToString(usernamePassword.toByteArray()))
Na przykład, jeśli zakodujesz nazwę użytkownika 'http_user' i hasło 'qwe123', otrzymasz następujący zakodowany ciąg base64: aHR0cF91c2VyOnF3ZTEyMw==. Aby wysłać
Nagłówek żądania HTTP do wysyłania SMS-ów z Kotlina
Aby odebrać wiadomość SMS, musisz uwzględnić następujące linie jako nagłówki w żądaniu HTTP. Pamiętaj, że zawieramy nagłówek Content-Type i Authorization.
Content-Type: application/json Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Żądanie HTTP do odbierania SMS-ów z Kotlina
Aby odebrać przychodzącą wiadomość SMS, Twoja aplikacja Kotlina wyśle żądanie HTTP podobne do poniższego. Pamiętaj, że to żądanie zawiera część nagłówka HTTP i część ciała HTTP. Ciało HTTP to ciąg danych zakodowany w JSON. Zawiera numer odbiorcy i tekst wiadomości.
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
Odpowiedź HTTP otrzymana przez przykład SMS w Kotlinie
Gdy bramka SMS otrzyma to żądanie, wygeneruje odpowiedź HTTP. Odpowiedź HTTP będzie zawierać kod statusu, aby wskazać, czy żądanie wysłania SMS zakończyło się sukcesem, czy nie. Zwróci również strukturę zakodowaną w JSON, aby dostarczyć przydatne informacje o przesłaniu wiadomości.
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" } ] } ] } }
Ten film pokazuje, jak pobrać i użyć projektu ReceiveSms.kt. Po otwarciu przykładowego projektu możesz zauważyć, że istnieje pakiet o nazwie Ozeki.Libs.Rest. To właśnie ten pakiet zawiera MessageApi i wszystko, czego potrzebujesz, aby odbierać wiadomości SMS za pomocą Kotlin.
More information
- Kotlin wyślij SMS za pomocą REST API HTTP (przykład kodu)
- Kotlin wyślij wiele SMS za pomocą REST API HTTP (przykład kodu)
- Kotlin zaplanuj SMS za pomocą REST API HTTP (przykład kodu)
- Kotlin odbierz SMS za pomocą REST API HTTP (przykład kodu)
- Kotlin usuń SMS za pomocą REST API HTTP (przykład kodu)
- Github: Kotlin SMS API