إرسال الرسائل النصية القصيرة (SMS) باستخدام Swift (iOS/macOS): نظرة عامة على المكتبات وAPI
في تطوير التطبيقات المحمولة الحديثة، لا تزال إمكانية إرسال رسائل SMS ميزة مطلوبة: بدءًا من تأكيد رقم الهاتف وصولاً إلى الإشعارات الجماعية. في نظام Apple البيئي (iOS/macOS) باستخدام لغة Swift، توجد عدة طرق - بدءًا من MessageUI المدمج وصولاً إلى التكامل مع مزودي خدمات SMS السحابية. في هذه المقالة، سنستعرض المكتبات وAPI الرئيسية، ومزاياها وقيودها، بالإضافة إلى تقديم أمثلة عملية.
1. مكتبة MessageUI المدمجة
أبسط طريقة هي استخدام إطار العمل MessageUI المتاح على iOS وmacOS. يتيح لك استدعاء واجهة إرسال SMS القياسية (عبر MFMessageComposeViewController) دون الحاجة إلى توصيل SDKs خارجية.
الإمكانيات:
- إرسال الرسائل النصية القصيرة عبر تطبيق "الرسائل" النظامي.
- دعم المرفقات (صور، فيديو، جهات اتصال).
- لا يتطلب التسجيل لدى مزود خدمة.
القيود:
- يعمل فقط على الأجهزة الفعلية (وليس على المحاكي).
- يرى المستخدم الواجهة ويؤكد الإرسال.
- غير مناسب للإرسال التلقائي (من الخادم).
مثال برمجي بلغة Swift (iOS):
import MessageUIimport UIKit
class ViewController: UIViewController, MFMessageComposeViewControllerDelegate {
@IBAction func sendSMSTapped(_ sender: UIButton) { guard MFMessageComposeViewController.canSendText() else { print("الجهاز لا يدعم إرسال الرسائل النصية القصيرة") return } let messageVC = MFMessageComposeViewController() messageVC.body = "مرحباً! هذه رسالة SMS تجريبية من Swift." messageVC.recipients = ["+79123456789"] messageVC.messageComposeDelegate = self present(messageVC, animated: true, completion: nil) }
func messageComposeViewController(_ controller: MFMessageComposeViewController, didFinishWith result: MessageComposeResult) { switch result { case .sent: print("تم إرسال الرسالة النصية") case .cancelled: print("تم الإلغاء من قبل المستخدم") case .failed: print("فشل الإرسال") @unknown default: break } controller.dismiss(animated: true, completion: nil) }}بالنسبة لـ macOS، يتم استخدام NSSharingService مع النوع .composeMessage، لكن وظائفه محدودة.
2. Twilio — API سحابي للرسائل النصية القصيرة
Twilio هي واحدة من أشهر الخدمات لإرسال الرسائل النصية القصيرة برمجياً. يتم التكامل مع تطبيق Swift عبر REST API أو عميل Swift الرسمي twilio-swift.
المزايا:
- سرعة توصيل عالية، ودعم لأكثر من 100 دولة.
- إمكانية الإرسال دون تدخل المستخدم (منطق الخادم).
- إعدادات مرنة: المرسل، القوالب، webhooks.
مثال للإرسال عبر URLSession:
import Foundation
func sendSMSviaTwilio(to phoneNumber: String, message: String) { let accountSID = "YOUR_ACCOUNT_SID" let authToken = "YOUR_AUTH_TOKEN" let fromNumber = "+1234567890" // رقم Twilio الخاص بك 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)" guard let loginData = loginString.data(using: .utf8) else { return } let base64Login = loginData.base64EncodedString() request.setValue("Basic \\(base64Login)", forHTTPHeaderField: "Authorization") let bodyParams = "To=\\(phoneNumber)&From=\\(fromNumber)&Body=\\(message)"