إرسال الرسائل النصية القصيرة (SMS) باستخدام Swift (iOS/macOS): واجهة برمجة التطبيقات MessageUI والخدمات الخارجية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال الرسائل النصية القصيرة (SMS) باستخدام Swift (iOS/macOS): واجهات برمجة التطبيقات والمكتبات



في تطوير تطبيقات iOS وmacOS، غالبًا ما تنشأ الحاجة لإرسال رسائل نصية قصيرة (SMS) — للتحقق من المستخدمين، أو إرسال الإشعارات، أو التكامل مع أنظمة CRM. في هذه المقالة، سنناقش طريقتين رئيسيتين: استخدام الإطار المدمج MessageUI لإرسال الرسائل النصية القصيرة عبر تطبيق النظام، والتكامل مع مزودي خدمات الرسائل النصية السحابية (Twilio، Nexmo/Vonage) عبر واجهة برمجة التطبيقات HTTP. كما سنناقش القيود وأفضل الممارسات.



1. إرسال الرسائل النصية القصيرة عبر MessageUI (لنظام iOS فقط)



يوفر إطار MessageUI وحدة التحكم MFMessageComposeViewController، والتي تتيح لك إرسال رسالة نصية قصيرة من تطبيقك باستخدام الواجهة القياسية لنظام iOS. هام: تعمل هذه الطريقة فقط على الأجهزة الحقيقية (وليس على المحاكي) وتتطلب وجود بطاقة SIM نشطة.



الخطوة 1: ربط الإطار

أضف الاستيراد في الملف الذي ستعمل فيه مع الرسائل النصية القصيرة:

import MessageUI


الخطوة 2: التحقق من إمكانية الإرسال

قبل استدعاء وحدة التحكم، تأكد من أن الجهاز يمكنه إرسال الرسائل النصية القصيرة:

if MFMessageComposeViewController.canSendText() {    // يمكن الإرسال} else {    // عرض خطأ للمستخدم}


الخطوة 3: إنشاء وحدة التحكم وتكوينها

let messageVC = MFMessageComposeViewController()messageVC.body = "رمز التحقق الخاص بك: 123456"messageVC.recipients = ["+79001234567"]messageVC.messageComposeDelegate = self // لا تنس تعيين المفوضpresent(messageVC, animated: true, completion: nil)


الخطوة 4: تنفيذ المفوض

extension YourViewController: MFMessageComposeViewControllerDelegate {    func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) {        controller.dismiss(animated: true) {            switch result {            case .sent:                print("تم إرسال الرسالة النصية القصيرة")            case .cancelled:                print("تم الإلغاء")            case .failed:                print("خطأ في الإرسال")            @unknown default:                break            }        }    }}


القيود:

  • لا يعمل في المحاكي.
  • يرى المستخدم الواجهة ويمكنه تعديل الرسالة.
  • غير مناسب للإرسال التلقائي (على سبيل المثال، الجزء الخادم).
  • غير متوفر على macOS (لنظام iOS فقط).


2. إرسال الرسائل النصية القصيرة عبر واجهات برمجة التطبيقات الخارجية (Twilio، Nexmo وغيرها)



لإرسال الرسائل النصية القصيرة من الخادم (بدون تدخل المستخدم)، استخدم واجهة برمجة التطبيقات HTTP لمزودي الخدمات السحابية. لنلقِ نظرة على مثال مع Twilio — أحد أشهر الخدمات.



الخطوة 1: الحصول على بيانات الاعتماد

سجل في Twilio، واحصل على Account SID و Auth Token ورقم هاتف المرسل (على سبيل المثال، +15005550006 للاختبار).



الخطوة 2: إرسال طلب POST

استخدم URLSession لاستدعاء واجهة برمجة التطبيقات Twilio:

func sendSMSviaTwilio(to recipient: String, message: String) {    let accountSID = "YOUR_ACCOUNT_SID"    let authToken = "YOUR_AUTH_TOKEN"    let fromNumber = "+15005550006"        let urlString = "https://api.twilio.com/2010-04-01/Accounts/\\(accountSID)/Messages.json"    guard let url = URL(string: urlString) else { return }        var request = URLRequest(url: url)    request.httpMethod = "POST"    let loginString = "\\(accountSID):\\(authToken)"    let loginData = loginString.data(using: .utf8)!    let base64LoginString = loginData.base64EncodedString()    request.setValue("Basic \\(base64LoginString)", forHTTPHeaderField: "Authorization")        let bodyParams = [        "From": fromNumber,        "To": recipient,        "Body": message    ]    le                    

توصيات