كيفية استقبال رسالة SMS في Kotlin

أبسط طريقة لإرسال رسائل SMS من Kotlin هي استخدام واجهة برمجة تطبيقات HTTP/Rest المدمجة لبوابة Ozeki SMS. عند استخدام هذه الواجهة، ستقوم بإرسال رسائل SMS عن طريق إرسال طلب HTTP Post إلى بوابة الرسائل القصيرة. سيحتوي طلب HTTP Post على رسالة مُنسقة بتنسيق json. ستقوم بوابة الرسائل القصيرة بإرسال هذه الرسالة إلى هاتف المستلم، وسيتم إرجاع استجابة HTTP 200 OK لطلبك. (الشكل 1)

كيفية استقبال رسالة SMS في Kotlin
الشكل 1 - كيفية استقبال رسالة SMS في Kotlin

كود Kotlin لاستقبال رسائل SMS على الهاتف المحمول

يوضح مثال كود Kotlin للرسائل القصيرة أدناه كيف يمكنك استقبال رسالة (أو رسائل) SMS باستخدام واجهة برمجة تطبيقات HTTP Rest لبوابة Ozeki SMS باستخدام مكتبة Kotlin Ozeki.Libs.Rest. هذه المكتبة مقدمة لك مجانًا، ويمكنك استخدامها وتعديلها في أي من مشاريعك.

الفيديو 1 - كيفية تحميل مثال ReceiveSms.kt.zip (شرح بالفيديو)

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="تحميل الوارد"
        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="الرسائل"
        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>
	

كيفية استخدام مثال Kotlin للرسائل القصيرة:

يمكنك استخدام فئة MessageApi لـ استقبال رسالة (أو رسائل) SMS من بوابة الرسائل القصيرة. سيتم توجيه طلبك من جهازك إلى بوابة الرسائل القصيرة عبر الإنترنت.

تحميل ReceiveSms.kt

يمكن تنزيل كود المصدر الموضح في هذه المقالة واستخدامه وتعديله مجانًا.
تحميل: ReceiveSms.kt.zip (148 كيلوبايت)

ما الموجود في ملف ReceiveSms.kt.zip؟

يحتوي ملف ReceiveSms.kt.zip على مشروع مثال، والذي يتضمن مكتبة Ozeki.Libs.Rest. باستخدام هذه المكتبة، يمكنك إرسال وحذف وتمييز واستقبال رسائل SMS عن طريق إنشاء MessageApi واستخدام الطرق Send() وDelete() وMark() وReceive(). (الشكل 2)

مشروع مثال لاستقبال رسائل SMS باستخدام Kotlin
الشكل 2 - دليل ReceiveSms.kt

كيفية استقبال رسائل SMS باستخدام Kotlin (خطوات سريعة)

لاستقبال رسائل SMS باستخدام Kotlin:

  1. تثبيت Ozeki SMS Gateway
  2. توصيل Ozeki SMS Gateway بشبكة الهاتف المحمول
  3. إرسال رسالة SMS تجريبية من واجهة Ozeki
  4. إنشاء مستخدم لواجهة برمجة تطبيقات HTTP للرسائل القصيرة
  5. Android Studio
  6. تحميل مشروع المثال أعلاه
  7. إنشاء واجهة برمجة تطبيقات لتنزيل الرسائل الواردة
  8. استخدام طريقة DownloadIncoming() لاستقبال رسائلك
  9. قراءة رسالة الاستجابة على وحدة التحكم
  10. التحقق من السجلات في بوابة الرسائل القصيرة

تثبيت بوابة Ozeki للرسائل القصيرة وإنشاء مستخدم واجهة برمجة التطبيقات HTTP

لتتمكن من استقبال الرسائل القصيرة باستخدام Kotlin، تحتاج أولاً إلى تثبيت بوابة Ozeki للرسائل القصيرة. يمكن تثبيت بوابة الرسائل القصيرة على نفس الكمبيوتر الذي تقوم فيه بتطوير كود Kotlin في Android Studio. بعد التثبيت، تكون الخطوة التالية هي ربط بوابة Ozeki للرسائل القصيرة بشبكة الهاتف المحمول. يمكنك إنشاء مستخدم لواجهة برمجة التطبيقات HTTP للرسائل القصيرة. قم بإنشاء مستخدم باسم مستخدم "http_user"، وكلمة مرور "qwe123" لجعل المثال يعمل دون تعديل.

بعد إعداد البيئة، يمكنك تشغيل كود Kotlin الخاص بك.

رابط واجهة برمجة التطبيقات HTTP لإرسال الرسائل القصيرة من Kotlin

لاستقبال الرسائل القصيرة باستخدام Kotlin، سيتعين على Kotlin إرسال طلب HTTP إلى بوابة الرسائل القصيرة. رابط واجهة برمجة التطبيقات موضح أدناه. لاحظ أنه يجب استبدال عنوان IP (127.0.0.1) بعنوان IP الخاص ببوابة الرسائل القصيرة لديك. إذا تم تثبيت بوابة Ozeki للرسائل القصيرة على نفس الكمبيوتر الذي يعمل عليه تطبيق الرسائل القصيرة JavaScript، يمكن أن يكون هذا 127.0.0.1. إذا تم تثبيته على كمبيوتر مختلف، فيجب أن يكون عنوان IP لذلك الكمبيوتر.

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

مصادقة HTTP لاستقبال الرسائل القصيرة باستخدام Kotlin

لمصادقة عميل الرسائل القصيرة Kotlin، تحتاج إلى إرسال اسم المستخدم وكلمة المرور في سلسلة مشفرة بـ base64 إلى الخادم في طلب HTTP. التنسيق المستخدم هو: base64(username+":"+password). في Kotlin، يمكنك استخدام الكود التالي لإجراء هذا التشفير:

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

على سبيل المثال، إذا قمت بتشفير اسم المستخدم 'http_user' وكلمة المرور 'qwe123'، ستحصل على السلسلة المشفرة بـ base64 التالية: aHR0cF91c2VyOnF3ZTEyMw==. للإرسال

رأس طلب HTTP لإرسال الرسائل القصيرة من Kotlin

لاستقبال الرسالة/الرسائل القصيرة، تحتاج إلى تضمين الأسطر التالية كرؤوس في طلب HTTP. لاحظ أننا نضمن نوع المحتوى ورأس المصادقة.

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

طلب HTTP لاستقبال الرسائل القصيرة باستخدام Kotlin

لاستقبال الرسالة/الرسائل القصيرة الواردة، سيرسل تطبيق Kotlin الخاص بك طلب HTTP مشابه للطلب أدناه. لاحظ أن هذا الطلب يحتوي على جزء رأس HTTP وجزء جسم HTTP. جسم HTTP هو سلسلة بيانات مشفرة بـ JSON. يحتوي على رقم المستلم ونص الرسالة.

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 التي يتلقاها مثال الرسائل القصيرة Kotlin

بمجرد أن تتلقى بوابة الرسائل القصيرة هذا الطلب، ستقوم بإنشاء استجابة HTTP. ستحتوي استجابة HTTP على رمز حالة للإشارة إلى ما إذا كان طلب إرسال الرسالة القصيرة ناجحًا أم لا. كما ستعود بهيكل مشفر بـ JSON لتزويدك بتفاصيل مفيدة حول إرسال الرسالة.

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

كيفية استقبال رسائل SMS باستخدام Kotlin باستخدام واجهة برمجة تطبيقات الرسائل القصيرة ومشروع المثال أعلاه (فيديو تعليمي)

يوضح لك هذا الفيديو كيفية تنزيل واستخدام مشروع ReceiveSms.kt. بمجرد فتح مشروع المثال، قد تلاحظ وجود حزمة تسمى Ozeki.Libs.Rest. هذه هي الحزمة التي تحتوي على MessageApi وكل ما تحتاجه لاستقبال رسالة (رسائل) SMS باستخدام Kotlin.

الفيديو 2 - كيفية استقبال رسالة (رسائل) SMS باستخدام كود Kotlin أعلاه (فيديو تعليمي)

كيفية التحقق من قبول الطلب من قبل مستخدم HTTP

بعد إرسال الرسالة القصيرة، من الجيد التحقق من بوابة الرسائل القصيرة الخاصة بك لمعرفة ما تم استلامه. يمكنك التحقق من السجل عن طريق فتح تفاصيل مستخدم HTTP من وحدة تحكم إدارة بوابة Ozeki SMS. في نهاية الفيديو أعلاه، يمكنك رؤية كيفية التحقق مما إذا كان الطلب قد تم استلامه من قبل http_user. (الشكل 3)

مشروع Kotlin لاستقبال رسائل SMS
الشكل 3 - مشروع ReceiveSms.kt في Android Studio

كيف يبدو استخدام التطبيق على الهاتف (فيديو تعليمي)

في الشكل 4، يمكنك رؤية كيف يبدو استخدام التطبيق على الهاتف. كما ترى في صورة قبل، افتراضيًا ليس لديك أي رسائل واردة. اضغط على 'تنزيل الوارد' للحصول على الرسائل المرسلة إليك. في صورة بعد، يمكنك رؤية أن جميع المعلومات حول الرسالة مرئية عند تنزيلها.

تطبيق Kotlin مثال لاستقبال رسائل SMS

الشكل 4 - تطبيق ReceiveSms مثال قبل وبعد تنزيل الرسائل

كيفية إضافة Ozeki.Libs.Rest إلى مشروعك الخاص

يمكن تنزيل واستخدام وتعديل مكتبة Ozeki.Libs.Rest مجانًا.
تنزيل: Ozeki.Libs.Rest.kt.zip (7.66 كيلوبايت)

إذا قررت إنشاء تطبيقك بنفسك فقط باستخدام مكتبة Ozeki.Libs.Rest، فهناك بعض الأشياء التي يجب تغييرها في تطبيقك الأساسي. لاستخدام مكتبة Ozeki.Libs.Rest، يجب وضعها في مجلد java في الدليل الرئيسي
في الفيديو التالي، سأوضح لك كيفية تنزيل وإضافة مكتبة Ozeki.Libs.Rest إلى مشروعك الخاص.

الفيديو 3 - كيفية إضافة مكتبة Ozeki.Libs.Rest إلى تطبيقك الخاص (فيديو تعليمي)

التبعيات

من المهم ذكر أن مكتبة Ozeki.Libs.Rest لديها بعض التبعيات. لاستخدامها، يجب إضافة هذه التبعيات إلى 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'
	

الكود 1 - قائمة التبعيات التي تحتاج إلى تضمينها.

إضافة التبعيات (فيديو تعليمي)

في الفيديو التالي، سترى كيفية إرفاق التبعيات المذكورة سابقًا. سيبدأ بنسخ الكود وسيأخذك إلى التبعيات المضافة بنجاح. الفيديو مدته 53 ثانية فقط، لكنه يحتوي على جميع الخطوات المطلوبة لإكمال الطريقة. يمكنك متابعة هذا البرنامج التعليمي دون أي جهد.

الفيديو 4 - كيفية إضافة التبعيات المطلوبة (فيديو تعليمي)

الوصول إلى الإنترنت

لتمكين تطبيقك من إرسال طلب HTTP، يجب تمكين تطبيقك للاتصال بالإنترنت.
في الفيديو التالي، سأوضح لك كيفية تمكين الوصول إلى الإنترنت لتطبيق Kotlin الخاص بك.

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

الكود 2 - لتمكين الوصول إلى الإنترنت لتطبيق Kotlin الخاص بك.

android:usesCleartextTraffic="true"
	

الكود 3 - لتمكين إرسال طلبات HTTP

كيفية إضافة اتصال بالإنترنت إلى مشروعك (فيديو تعليمي)

تحتاج إلى إضافة كلتا هاتين السطور إلى ملف AndroidManifest.xml.
في الفيديو التالي، سأوضح لك أين يجب إدراج الأكواد أعلاه. سيبدأ الفيديو بنسخ الكود وسيأخذك إلى اتصال الإنترنت المضاف بنجاح. هذا الفيديو دقيق وسهل المتابعة.

الفيديو 5 - كيفية السماح بالوصول إلى الإنترنت لتطبيقك (فيديو تعليمي)

الختام

تم كتابة هذا الدليل لإظهار خطوات استقبال الرسائل القصيرة (SMS) باستخدام لغة Kotlin عبر مستخدم HTTP الخاص ببوابة Ozeki للرسائل القصيرة. هذا الحل يساعدك في جمع الرسائل التي تستقبلها في مجلد الوارد ونقلها إلى برنامجك المكتوب بلغة Kotlin. استخدام هذا الحل يمنحك القدرة على الحفاظ على نظام مراسلتك منظمًا كما خططت.

هذه مجرد البداية، تعلم المزيد حول إدارة رسائلك على صفحة Ozekي الإلكترونية. لتبقى فعالًا ومحدثًا، رتب رسائلك، واقرأ المقال التالي حول كيفية حذف رسالة SMS في Kotlin.

لنبدأ العمل، قم بإعداد بوابة Ozeki للرسائل القصيرة الآن!

More information