Bluetooth Low Energy (BLE) في تطوير التطبيقات المحمولة: ما هو، البروتوكولات وكيف يعمل

المؤلف: IT Sectr نُشر: 2026-07-25 وقت القراءة: 11 دق

Bluetooth Low Energy (BLE) هو معيار اتصال لاسلكي مُحسَّن لنقل كميات صغيرة من البيانات باستهلاك طاقة ضئيل. وفقًا لـ Bluetooth SIG, 2025، تُستخدم التقنية في أكثر من 5 مليارات جهاز حول العالم. GATT (Generic Attribute Profile) ينظم البيانات في تسلسل هرمي Service → Characteristic → Descriptor، والذي يشكل أساس جميع تطبيقات BLE لنظامي iOS و Android.

النقاط الرئيسية

  • GATT — بروتوكول تبادل البيانات في Bluetooth Low Energy مع تسلسل هرمي Service → Characteristic → Descriptor
  • Core Bluetooth — إطار عمل Apple للعمل مع BLE على iOS، المبني على CBCentralManager و CBPeripheral
  • BluetoothGatt — واجهة API الرئيسية لاتصالات BLE على Android عبر BluetoothLeScanner
  • iBeacon — بروتوكول منارات BLE من Apple مع دعم أصلي عبر CLLocationManager على iOS
  • Bonding — اتصال مشفر دائم يلغي الحاجة إلى المسح والاقتران المتكرر

ما هو Bluetooth Low Energy (BLE) وكيف يعمل؟

Bluetooth Low Energy (BLE) يعمل بنموذج خادم-عميل مع دورين: Central (الجهاز المحمول) و Peripheral (الجهاز). Central يمسح الموجات ويبدأ الاتصال، بينما Peripheral ينقل البيانات. على عكس Bluetooth الكلاسيكي، BLE غير مصمم لتدفقات الصوت — مهمته نقل حزم صغيرة باستهلاك طاقة ضئيل. وفقًا لـ Bluetooth SIG Core Specification 5.4 (2025)، يدعم BLE سرعات تصل إلى 2 ميجابت/ثانية باستهلاك تيار أقل من 15 مللي أمبير في الوضع النشط.

التسلسل الهرمي لـ GATT: Service، Characteristic، Descriptor

GATT (Generic Attribute Profile) يحدد بنية بيانات Bluetooth Low Energy. Service هو مجموعة منطقية من الخصائص (مثل Heart Rate Service 0x180D). Characteristic هي نقطة بيانات بقيمة محددة. Descriptor هو بيانات وصفية للخاصية، بما في ذلك CCCD لإدارة الإشعارات. كل عنصر له UUID — 16 بت للملفات الشخصية القياسية لـ Bluetooth SIG أو 128 بت للملفات المخصصة.

Bluetooth Low Energy في التطبيقات المحمولة يستخدم هذا التسلسل الهرمي لتنظيم تبادل البيانات بين الهاتف الذكي والأجهزة الطرفية. الفهم الصحيح لـ GATT هو أساس تطوير تطبيقات BLE على كلا المنصتين. يجب على المطور معرفة UUID لخدمات وخصائص الجهاز، بالإضافة إلى خصائص كل خاصية (read، write، notify، indicate).

Advertising Data و Scan Response

أجهزة BLE ترسل حزم إعلانية (advertising packets) للاكتشاف. Advertising Data يحتوي على اسم الجهاز و UUID الخدمات و RSSI و Manufacturer Specific Data. حجم الحزمة الإعلانية محدود بـ 31 بايت. لنقل بيانات إضافية، يُستخدم Scan Response — حزمة ثانية يطلبها الجهاز المركزي بعد الاكتشاف.

BLE على iOS: Core Bluetooth، CBCentralManager، CBPeripheral

على iOS، يتولى إطار العمل Core Bluetooth مسؤولية Bluetooth Low Energy. CBCentralManager يدير المسح والاتصال، CBPeripheral يمثل جهاز BLE عن بُعد. العملية قياسية: تهيئة CBCentralManager، التحقق من حالة poweredOn، بدء scanForPeripherals، الاتصال واكتشاف الخدمات. Core Bluetooth يدير تلقائيًا طاقة وحدة الراديو — إذا لم يكن BLE قيد الاستخدام، يتم إيقاف تشغيله.

BLE في تطوير التطبيقات المحمولة على iOS يتطلب مراعاة الأوضاع الخلفية. الوضع الخلفي لـ Core Bluetooth يتم تفعيله عبر Capabilities المشروع (Uses Bluetooth LE accessories). في الخلفية، يمكن للتطبيق تلقي إشعارات من الخصائص، لكن المسح محدود — يعيد النظام تشغيله فقط عند تحرك الجهاز. بالنسبة لـ iBeacon، يعمل المسح الخلفي بنشاط أكبر عبر CLLocationManager.

مثال على مسح BLE في Swift

swift
import CoreBluetooth

class DeviceScanner: NSObject, CBCentralManagerDelegate {
    var centralManager: CBCentralManager!

    func start() {
        centralManager = CBCentralManager(delegate: self, queue: nil)
    }

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        guard central.state == .poweredOn else { return }
        central.scanForPeripherals(withServices: nil, options: nil)
    }

    func centralManager(_ central: CBCentralManager,
                        didDiscover peripheral: CBPeripheral,
                        advertisementData: [String: Any],
                        rssi RSSI: NSNumber) {
        print("تم العثور على: \(peripheral.name ?? "unknown")")
    }
}

في هذا المثال، CBCentralManagerDelegate يعالج جميع أحداث اتصال BLE. طريقة centralManagerDidUpdateState تتحقق مما إذا كان Bluetooth قيد التشغيل على الجهاز المحمول. بعد التهيئة الناجحة، يبدأ المسح. يتم استدعاء callback didDiscover لكل جهاز يتم العثور عليه.

الاتصال وقراءة الخصائص في Core Bluetooth

بعد اكتشاف الجهاز، تحتاج إلى استدعاء connect و discoverServices. CBPeripheralDelegate يوفر طرقًا لمعالجة كل خطوة: didDiscoverServices، didDiscoverCharacteristics، didUpdateValueFor. كل طريقة غير متزامنة — تصل البيانات عبر callbacks التفويض. RSSI (Received Signal Strength Indicator) يظهر مستوى الإشارة: كلما اقتربت القيمة من 0، كانت الإشارة أقوى.

BLE على Android: BluetoothAdapter، BluetoothGatt، BluetoothLeScanner

على Android، يتم تنفيذ Bluetooth Low Energy عبر حزمة android.bluetooth. BluetoothAdapter هو نقطة الدخول لجميع عمليات BLE. BluetoothLeScanner يبدأ المسح مع callbacks من نوع ScanCallback. بعد اكتشاف جهاز، يتم إنشاء BluetoothGatt — اتصال بالجهاز الطرفي. BluetoothGattCallback يعالج الأحداث: الاتصال، اكتشاف الخدمات، قراءة الخصائص، تغييرات RSSI.

Bluetooth Low Energy في التطبيقات المحمولة على Android يتطلب أذونات صريحة BLUETOOTH_SCAN و BLUETOOTH_CONNECT و ACCESS_FINE_LOCATION. منذ Android 12، تم فصل الأذونات: BLUETOOTH_SCAN للمسح، BLUETOOTH_CONNECT للاتصال. ACCESS_FINE_LOCATION مطلوب فقط لمسح أنواع معينة من الأجهزة. بدون هذه الأذونات، لا يمكن للتطبيق العمل مع BLE.

مثال على مسح BLE في Kotlin

kotlin
class BLEScanner(private val bluetoothAdapter: BluetoothAdapter) {

    fun startScan() {
        val scanner = bluetoothAdapter.bluetoothLeScanner
        val settings = ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .build()
        scanner.startScan(null, settings, scanCallback)
    }

    private val scanCallback = object : ScanCallback() {
        override fun onScanResult(callbackType: Int, result: ScanResult) {
            val device = result.device
            val rssi = result.rssi
            Log.d("BLE", "الجهاز: ${device.name}، RSSI: $rssi")
        }
    }
}

ScanSettings يسمح بتكوين وضع المسح: LOW_POWER لتوفير البطارية، BALANCED للمهام القياسية، LOW_LATENCY لأقصى سرعة اكتشاف. ScanFilter يضيق نطاق البحث حسب UUID الخدمة أو اسم الجهاز أو عنوان MAC. التصفية تقلل استهلاك الطاقة وتسريع اكتشاف الجهاز المطلوب.

BluetoothGatt: القراءة والإشعارات على Android

بعد إنشاء BluetoothGatt عبر connectGatt، يستدعي التطبيق discoverServices. BluetoothGattCallback يحتوي على onServicesDiscovered، onCharacteristicRead، onCharacteristicChanged. لتلقي الإشعارات حول تغييرات الخاصية، تحتاج إلى استدعاء setCharacteristicNotification. تتطلب العملية الانتباه: كل عملية GATT غير متزامنة، وتأتي النتيجة في callback منفصل.

iBeacon و Bonding و Advertising Data في نظام BLE البيئي

iBeacon هي تقنية Apple لمنارات BLE التي ترسل UUID و Major و Minor. جهاز المنارة يبث حزمة إعلانية، ويطبيق الهاتف يحدد الموقع والمسافة بناءً على هذه البيانات. على iOS، iBeacon مدعوم أصليًا عبر CLLocationManager. على Android، يتطلب مكتبة طرف ثالث (مثل AltBeacon أو Android iBeacon Library).

Bonding هو إجراء إنشاء اتصال آمن دائم بين أجهزة BLE. بعد Bonding، يتم حفظ مفاتيح التشفير، وتتصل الأجهزة تلقائيًا عند الاقتراب مرة أخرى. على iOS، يتم إدارة bonding تلقائيًا بواسطة النظام. على Android — عبر BluetoothDevice.createBond(). Bonding مهم للأجهزة القابلة للارتداء وأجهزة تتبع اللياقة البدنية التي تتطلب إعادة اتصال سريعة.

الحزم الإعلانية و Manufacturer Specific Data

Advertising Data هي آلية اكتشاف رئيسية في Bluetooth Low Energy. مصنعو الأجهزة يمكنهم إضافة Manufacturer Specific Data إلى الحزمة الإعلانية لنقل بيانات مخصصة. تنسيق الحزمة يشمل Company Identifier (2 بايت) وبيانات عشوائية. على iOS، CBCentralManager يقبل مصفوفة من UUID الخدمات للتصفية — وهذا يوفر البطارية. على Android، ScanFilter يعمل بنفس المبدأ.

مقارنة iOS و Android لتطوير BLE

المعاملiOS (Core Bluetooth)Android (BluetoothGatt)
المديرCBCentralManagerBluetoothLeScanner
الاتصالconnect(to:)connectGatt()
الخدماتdiscoverServices()discoverServices()
القراءةreadValue(for:)readCharacteristic()
الإشعاراتsetNotifyValue(_:for:)setCharacteristicNotification()
الأذوناتتلقائيةBLUETOOTH_SCAN، BLUETOOTH_CONNECT
iBeaconCLLocationManager (أصلي)AltBeacon / مكتبات

تحسين BLE: MTU، Connection Interval والوضع الخلفي

MTU (Maximum Transmission Unit) هو أقصى حجم لحزمة بيانات Bluetooth Low Energy واحدة. افتراضيًا، MTU يساوي 23 بايت (3 بايت رأس + 20 بايت بيانات). زيادة MTU إلى 512 بايت تسرع النقل بشكل كبير عند تبادل التكوينات أو السجلات. على iOS، maximumWriteValueLength يظهر MTU المتاح. على Android، يُستخدم requestMtu() لزيادة MTU.

Connection Interval هو التردد الذي يتحقق به الجهاز المركزي من الجهاز الطرفي. كلما كان الفاصل أقصر، زادت سرعة النقل، ولكن أيضًا زاد استهلاك الطاقة. القيم النموذجية تتراوح من 7.5 مللي ثانية إلى 4 ثوانٍ. لأجهزة تتبع اللياقة البدنية، 100 مللي ثانية كافية؛ للصوت — 7.5 مللي ثانية. BLE في تطوير التطبيقات المحمولة يتطلب توازنًا بين سرعة النقل وعمر بطارية الجهاز.

الوضع الخلفي على iOS و Android

iOS يدعم BLE في الوضع الخلفي عبر Background Modes، لكن مع قيود. التطبيق في الخلفية يتلقى إشعارات من الخصائص، لكنه لا يستطيع المسح بنشاط. يعيد النظام تشغيل المسح عند تغيير موقع الجهاز. على Android، المسح الخلفي يتطلب Foreground Service مع إشعار دائم. بدونه، سيقتل النظام المحمول العملية عند تصغير التطبيق.

توصيات عملية للتحسين

لتشغيل BLE موثوق في التطبيقات المحمولة، اتبع هذه القواعد. استخدم notify بدلاً من polling — خاصية مع الإشعارات ترسل البيانات عند التغيير، مما يوفر البطارية. حدد MTU الأمثل في بداية الاتصال. قم بتصفية الأجهزة حسب UUID الخدمة عند المسح. تحقق من توافق مكدس BLE عبر الموديلات المختلفة — يقوم المصنعون (Xiaomi، Huawei، Samsung) بإجراء تغييرات تؤثر على سلوك Bluetooth.

الأسئلة الشائعة

كيف يختلف BLE عن Bluetooth الكلاسيكي؟

Bluetooth Low Energy (BLE) مُحسَّن للنقل الدوري للحزم الصغيرة باستهلاك طاقة منخفض. Bluetooth الكلاسيكي مصمم لتدفقات الصوت والنقل المستمر لكميات كبيرة من البيانات.

ما هو GATT في Bluetooth Low Energy؟

GATT (Generic Attribute Profile) هو بروتوكول تبادل البيانات في BLE يحدد التسلسل الهرمي Service → Characteristic → Descriptor. GATT يُستخدم لقراءة البيانات وكتابتها وتلقي الإشعارات من أجهزة BLE.

لماذا يتطلب Android إذن ACCESS_FINE_LOCATION لـ BLE؟

قبل Android 12، كان مسح BLE يُستخدم لتحديد الموقع، لذا جمعت Google هذه الأذونات. منذ Android 12، تم تقديم إذن منفصل BLUETOOTH_SCAN بدون ربط بالموقع.

كيفية زيادة سرعة نقل البيانات عبر BLE؟

قم بزيادة MTU عبر requestMtu() على Android و maximumWriteValueLength على iOS. Connection Interval أيضًا يؤثر على السرعة — كلما كان أصغر، كان النقل أسرع. التركيبة المثلى توفر تحسنًا يصل إلى 10 مرات.

ما هو Bonding في BLE؟

Bonding هو إجراء إنشاء اتصال آمن دائم بين أجهزة BLE. بعد Bonding، يتم حفظ مفاتيح التشفير، وتتصل الأجهزة تلقائيًا دون الحاجة إلى بحث متكرر.

الملخص

  • Bluetooth Low Energy — معيار اتصال لاسلكي لإنترنت الأشياء باستهلاك طاقة ضئيل وسرعة تصل إلى 2 ميجابت/ثانية
  • GATT ينظم البيانات في تسلسل هرمي Service → Characteristic → Descriptor مع UUID لكل عنصر
  • Core Bluetooth — إطار عمل Apple لـ BLE على iOS مع CBCentralManager و CBPeripheral والأوضاع الخلفية
  • BluetoothGatt — واجهة API الرئيسية لنظام Android مع BluetoothAdapter و BluetoothLeScanner وأذونات BLUETOOTH_SCAN الصريحة
  • iBeacon — تقنية منارات BLE مع دعم أصلي على iOS عبر CLLocationManager
  • Bonding يتيح إعادة الاتصال التلقائي بعد حفظ مفاتيح التشفير
  • Bluetooth Low Energy في التطبيقات المحمولة يتطلب مراعاة MTU و Connection Interval وقيود الخلفية لكل منصة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع