كيفية حذف رسالة SMS في Kotlin
أبسط طريقة لإرسال رسائل SMS من Kotlin هي استخدام واجهة برمجة تطبيقات HTTP/Rest المدمجة في Ozeki SMS Gateway. عند استخدام هذه الواجهة، ستقوم بإرسال رسائل SMS عن طريق إرسال طلب HTTP Post إلى بوابة الرسائل القصيرة. سيحتوي طلب HTTP Post على رسالة مُنسقة بتنسيق json. ستقوم بوابة الرسائل القصيرة بإرسال هذه الرسالة إلى هاتف المستلم، وسيتم إرجاع استجابة HTTP 200 OK لطلبك. (الشكل 1)
كود Kotlin لحذف رسالة SMS
يوضح مثال كود Kotlin للرسائل القصيرة أدناه كيف يمكنك حذف رسالة (رسائل) SMS باستخدام واجهة برمجة تطبيقات HTTP REST الخاصة بـ Ozeki SMS Gateway باستخدام مكتبة Kotlin Ozeki.Libs.Rest. هذه المكتبة مقدمة لك مجانًا، ويمكنك استخدامها وتعديلها في أي من مشاريعك.
MainActivity.kt
package delete.sms import Ozeki.Libs.Rest.Configuration import Ozeki.Libs.Rest.Folder import Ozeki.Libs.Rest.MessageApi import Ozeki.Libs.Rest.Message import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.text.method.ScrollingMovementMethod 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 folderCategories:android.widget.Spinner = findViewById(R.id.folderCategories) val ID:android.widget.EditText = findViewById(R.id.inputId) val btnSendRequest:android.widget.Button = findViewById(R.id.btnSendRequest) 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 (ID.text.toString() != "") { val msg = Message() msg.ID = ID.text.toString() val folder: Folder when (folderCategories.selectedItem.toString()) { "Outbox" -> folder = Folder.Outbox; "Sent" -> folder = Folder.Sent; "Not sent" -> folder = Folder.NotSent; "Deleted" -> folder = Folder.Deleted; else -> folder = Folder.Inbox } GlobalScope.launch(Dispatchers.IO) { val response = api.Delete(folder, msg) logBox.text = String.format("%s\n%s", logBox.text, response.toString()) } ID.text.clear() } } } }
<?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/textId" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="36dp" android:text="ID:" android:textSize="20dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <EditText android:id="@+id/inputId" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:ems="10" android:hint="4c24263b-dacc-48d1-b179-b7e64f08eb26" android:inputType="textPersonName" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textId" /> <Spinner android:id="@+id/folderCategories" android:layout_width="320dp" android:layout_height="50dp" android:layout_marginTop="40dp" android:entries="@array/folders" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.494" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/inputId" /> <Button android:id="@+id/btnSendRequest" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:text="حذف" app:layout_constraintEnd_toEndOf="parent" android:backgroundTint="#FF3F3F" app:layout_constraintHorizontal_bias="0.505" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/logBox" /> <TextView android:id="@+id/logBox" android:layout_width="320dp" android:layout_height="250dp" android:layout_marginTop="40dp" android:scrollbars="vertical" android:text="السجلات:" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/folderCategories" /> </androidx.constraintlayout.widget.ConstraintLayout>
كيفية استخدام مثال Kotlin للرسائل القصيرة:
يمكنك استخدام فئة MessageApi لحذف رسالة (رسائل) SMS من بوابة الرسائل القصيرة. سيتم توجيه طلبك إلى بوابة الرسائل القصيرة من جهازك عبر الإنترنت.
تنزيل DeleteSms.kt
يمكن تنزيل الكود المصدري الموضح في هذه المقالة واستخدامه وتعديله مجانًا.
تنزيل: DeleteSms.kt.zip (149 كيلوبايت)
ما الموجود في ملف DeleteSms.kt.zip؟
يحتوي ملف DeleteSms.kt.zip على مشروع مثال، والذي يتضمن مكتبة Ozeki.Libs.Rest. باستخدام هذه المكتبة يمكنك إرسال وحذف وتمييز واستقبال رسائل SMS عن طريق إنشاء MessageApi واستخدام طرق Send() وDelete() وMark() وReceive(). (الشكل 2)
كيفية حذف الرسائل النصية باستخدام Kotlin (خطوات سريعة)
لحذف الرسائل النصية باستخدام Kotlin:
- تثبيت Ozeki SMS Gateway
- ربط Ozeki SMS Gateway بشبكة الهاتف المحمول
- إرسال رسالة نصية تجريبية من واجهة Ozeki
- إنشاء مستخدم HTTP API للرسائل النصية
- Android Studio
- تنزيل مشروع المثال أعلاه
- إنشاء الرسالة النصية عن طريق إنشاء كائن Message جديد
- إنشاء API لحذف رسالة نصية
- استخدام طريقة Delete لحذف رسالتك
- قراءة رسالة الاستجابة على وحدة التحكم
- فحص السجلات في بوابة الرسائل النصية
تثبيت Ozeki SMS Gateway وإنشاء مستخدم HTTP API
لتتمكن من حذف الرسائل النصية باستخدام Kotlin، تحتاج أولاً إلى تثبيت Ozeki SMS Gateway. يمكن تثبيت بوابة الرسائل النصية على نفس الكمبيوتر الذي تقوم فيه بتطوير كود Kotlin في Android Studio. بعد التثبيت، الخطوة التالية هي ربط Ozeki SMS Gateway بشبكة الهاتف المحمول. يمكنك إنشاء مستخدم HTTP API للرسائل النصية. قم بإنشاء مستخدم باسم مستخدم "http_user"، وكلمة مرور "qwe123" لجعل المثال يعمل دون تعديل.
بعد إعداد البيئة، يمكنك تشغيل كود Kotlin الخاص بك.
رابط HTTP API لإرسال الرسائل النصية من Kotlin
لحذف الرسائل النصية باستخدام Kotlin، سيتعين على Kotlin إرسال طلب HTTP إلى بوابة الرسائل النصية. رابط API موضح أدناه. لاحظ أنه يجب استبدال عنوان IP (127.0.0.1) بعنوان IP الخاص ببوابة الرسائل النصية. إذا كان Ozeki SMS Gateway مثبتًا على نفس الكمبيوتر الذي يعمل عليه تطبيق الرسائل النصية 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. يحتوي على معرفات الرسائل التي تريد حذفها.
POST /api?action=deletemsg HTTP/1.1 Connection: Keep-Alive Content-Length: 73 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 { "folder": "inbox", "message_ids": [ "f07b71e9-6c4c-8ff1-88a5-3aa9fec74966" ] }
استجابة 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: Fri, 18 Jun 2021 08:10:45 GMT Server: 10/10.3.120 Transfer-Encoding: chunked { "http_code": 200, "response_code": "SUCCESS", "response_msg": "", "data": { "folder": "inbox", "message_ids": [ "f07b71e9-6c4c-8ff1-88a5-3aa9fec74966" ] } }
كيفية حذف رسائل SMS باستخدام Kotlin باستخدام واجهة برمجة تطبيقات الرسائل القصيرة ومشروع المثال أعلاه (فيديو تعليمي)
يوضح لك هذا الفيديو كيفية تنزيل واستخدام مشروع DeleteSms.kt. بمجرد فتح مشروع المثال، قد تلاحظ وجود حزمة تسمى Ozeki.Libs.Rest. هذه هي الحزمة التي تحتوي على MessageApi وكل ما تحتاجه لحذف رسالة/رسائل SMS باستخدام Kotlin.
كيفية التحقق من قبول الطلب من قبل مستخدم HTTP
بعد إرسال الرسالة القصيرة، من الجيد التحقق من بوابة الرسائل القصيرة لمعرفة ما تم استلامه. يمكنك التحقق من السجل عن طريق فتح تفاصيل مستخدم HTTP من وحدة تحكم إدارة بوابة Ozeki SMS. في نهاية الفيديو أعلاه، يمكنك رؤية كيفية التحقق مما إذا كان الطلب قد تم استلامه من قبل http_user. (الشكل 3)
استخدام التطبيق على الهاتف
في الشكل 4، يمكنك رؤية كيف يبدو حذف رسالة SMS عند استخدام التطبيق على الهاتف. الصق معرف الرسالة في مربع النص 'ID' واضغط على زر 'حذف'. سيؤدي ذلك إلى حذف الرسالة المحددة. إذا تمت العملية بنجاح، سترى رسالة 'صحيح' في قسم 'السجلات'.
كيفية إضافة Ozeki.Libs.Rest إلى مشروعك الخاص
يمكن تنزيل واستخدام وتعديل مكتبة Ozeki.Libs.Rest مجانًا.
تنزيل: Ozeki.Libs.Rest.kt.zip (7.66 كيلوبايت)
إذا قررت إنشاء تطبيقك الخاص باستخدام مكتبة Ozeki.Libs.Rest فقط، فهناك بعض الأشياء التي يجب تغييرها في تطبيقك الأساسي. لاستخدام مكتبة Ozeki.Libs.Rest، يجب وضعها في مجلد java الخاص بالدليل الرئيسي.
في الفيديو التالي، سأوضح لك كيفية تنزيل وإضافة مكتبة 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'
كيفية إضافة التبعيات المطلوبة (فيديو تعليمي)
في هذا الفيديو، نقدم لك عملية إضافة التبعيات إلى مشروعك. سيبدأ الفيديو بنسخ الكود من صفحة هذا البرنامج التعليمي وسينتهي بالتبعيات في المشروع. هذه التبعيات هي أجزاء حاسمة من المشروع. بدونها، لن تعمل مكتبة Ozeki.Libs.Rest. هذا الفيديو مدته 53 ثانية فقط، ولكنه سهل الفهم والمتابعة.
الوصول إلى الإنترنت
لتمكين تطبيقك من إرسال طلب HTTP، يجب تمكين اتصال التطبيق بالإنترنت.
في الفيديو التالي، سأوضح لك كيفية تمكين الوصول إلى الإنترنت لتطبيق Kotlin الخاص بك.
<uses-permission android:name="android.permission.INTERNET" />
android:usesCleartextTraffic="true"
كيفية إضافة اتصال الإنترنت إلى مشروعك (فيديو تعليمي)
تحتاج إلى إضافة هذين السطرين إلى ملف AndroidManifest.xml.
في الفيديو التالي، سأوضح لك أين يجب إدخال الأكواد السابقة. سيبدأ الفيديو بنسخ الكود وسيأخذك إلى اتصال الإنترنت المضاف بنجاح. هذا الفيديو دقيق وسهل المتابعة.
أفكار أخيرة
يخبرك هذا المقال كيفية استخدام كود Kotlin المقدم لحذف رسائل SMS مع مستخدم HTTP الخاص بـ Ozeki SMS Gateway. إذا كنت تتعامل مع العديد من رسائل SMS يوميًا والعديد منها غير مرغوب فيه، فالإجراء الموضح هنا ضروري لك. التخزين المتوازن والمُحَذَّف بشكل متكرر مهم جدًا في جميع المجالات، حيث يسمح بعمل أكثر ديناميكية وكفاءة.
تواصل هذه الرحلة التعليمية على صفحة Ozekي، واختر من بين العديد من المقالات الأخرى. لنقرأ المقال بعنوان Github: Kotlin SMS API، وهو يتحدث عن أحد المستودعات التي يمكنك استخدامها بحرية.
قم بتنزيل Ozeki SMS Gateway الآن واستخدم ما تعلمته!
More information
- إرسال الرسائل القصيرة باستخدام Kotlin مع واجهة برمجة تطبيقات REST HTTP (عينة كود)
- إرسال رسائل متعددة باستخدام Kotlin مع واجهة برمجة تطبيقات REST HTTP (عينة كود)
- جدولة الرسائل القصيرة باستخدام Kotlin مع واجهة برمجة تطبيقات REST HTTP (عينة كود)
- استقبال الرسائل القصيرة باستخدام Kotlin مع واجهة برمجة تطبيقات REST HTTP (عينة كود)
- حذف الرسائل القصيرة باستخدام Kotlin مع واجهة برمجة تطبيقات REST HTTP (عينة كود)
- Github: واجهة برمجة تطبيقات الرسائل القصيرة لـ Kotlin