Service UUID: ما هو، التنسيق وأين يُستخدم

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

Service UUID هو معرّف فريد مكون من 16 أو 128 بت لتقنية Bluetooth Low Energy (BLE) والذي يُحدد بشكل قاطع خدمة وظيفية على الجهاز. خصصت Bluetooth SIG معرفات UUID قياسية 16 بت للخدمات الشائعة مثل Battery Service (0x180F) وDevice Information (0x180A) وHeart Rate (0x180D)، مما يُبسط التوافق عبر المنصات. وفقاً لـ Bluetooth Core Specification 5.4 (2023)، يجب أن تستخدم الخدمات المخصصة لمطوري الطرف الثالث معرفات UUID 128 بت، التي يضمن تنسيقها التفرد العالمي دون سجل مركزي. الإعلان الصحيح عن Service UUID هو الخطوة الأولى نحو التشغيل الصحيح لخادم GATT على الجهاز الطرفي.

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

  • Service UUID هو معرّف خدمة BLE يمكن أن يكون 16 بت (قياسياً) أو 128 بت (مخصصاً).
  • خصصت Bluetooth SIG أكثر من 60 UUID قياسياً للخدمات الشائعة — Battery وHeart Rate وDevice Information وغيرها.
  • يتم إنشاء معرفات UUID 128 بت بواسطة المطور وتضمن التفرد العالمي للخدمة دون التسجيل في هيئة مركزية.
  • أثناء المسح الضوئي، يكتشف الجهاز المركزي خدمات الجهاز الطرفي من خلال Service UUID الخاص بها، مما يُحدد توافق الأجهزة.
  • يمكن لخادم GATT واحد أن يُعلن عن خدمات متعددة بمعرفات UUID مختلفة — كل خدمة تحتوي على خصائصها الخاصة.

ما هو Service UUID في BLE؟

Service UUID هو معرّف يُخصص لخدمة GATT الخاصة بـ Bluetooth Low Energy للتعرف عليها بشكل قاطع من قبل الأجهزة الأخرى. في بنية BLE، تمثل كل خدمة مجموعة منطقية من الخصائص المرتبطة بوظيفة مشتركة. على سبيل المثال، يحتوي Battery Service على خاصية Battery Level التي تنقل شحن البطارية الحالي.

تدير Bluetooth SIG (مجموعة الاهتمامات الخاصة) سجل معرفات UUID 16 بت القياسية المخصصة للخدمات الأكثر شيوعاً. يتيح ذلك للأجهزة من مختلف المصنعين التعرف على خدمات بعضهم البعض دون إعداد مسبق. يمكن لأي متتبع لياقة بدنية من أي علامة تجارية أن يُعلن عن Heart Rate Service بـ UUID 0x180D، وسيفهم أي هاتف ذكي أن هذه خدمة معدل ضربات القلب.

وفقاً لـ Bluetooth Core Specification 5.4 (2023)، ينقسم نطاق UUID 16 بت (0x0000–0xFFFF) إلى جزأين: من 0x0001 إلى 0xFFFE هي خدمات Bluetooth SIG القياسية، و0xFFFF محجوز. إذا احتاج المطور إلى خدمة فريدة غير موجودة في سجل SIG، فإنه يستخدم UUID 128 بت.

الفرق بين UUID القياسي والمخصص ليس فقط في الطول: معرفات UUID 16 بت توفر وقت البث في حزمة الإعلان، حيث تُنقل كـ 2 بايت بدلاً من 16 بايت. بالنسبة للأجهزة ذات القيود الصارمة على حجم حزمة الإعلان (حتى 31 بايت)، هذا أمر بالغ الأهمية.

معرفات UUID القياسية والمخصصة

معرفات UUID القياسية 16 بت تغطي الفئات الرئيسية لأجهزة BLE: أجهزة الاستشعار الطبية، متتبعات اللياقة البدنية، الإلكترونيات القابلة للارتداء والملحقات. إذا كان الجهاز يطبق وظيفة قياسية، يُنصح المطور باستخدام UUID المقابل من سجل Bluetooth SIG لتحقيق أقصى توافق.

فيما يلي بعض الأمثلة على معرفات UUID القياسية للخدمات:

UUID (hex)اسم الخدمةالغرض
0x1800Generic Accessالتحكم في الوصول، اسم الجهاز، المظهر
0x180ADevice Informationالشركة المصنعة، الطراز، الرقم التسلسلي، إصدار البرنامج الثابت
0x180DHeart Rateقياس النبض، موقع المستشعر، طاقة البطارية
0x180FBattery Serviceمستوى شحن البطارية بالنسبة المئوية
0x181AEnvironmental Sensingدرجة الحرارة، الرطوبة، الضغط، الإضاءة
0x181CUser Dataالعمر، الوزن، الطول، الجنس، النبض أثناء الراحة

معرفات UUID المخصصة 128 بت ضرورية عندما يوفر الجهاز وظائف فريدة. على سبيل المثال، تقوم شركة تصنيع الأقفال الذكية بإنشاء خدمة Lock Control الخاصة بها بـ UUID بالشكل XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. هذا UUID مضمون ألا يتعارض مع الخدمات الأخرى، لأن مساحة القيم 128 بت لا تنضب عملياً.

تنسيق UUID 128 بت

يُكتب UUID 128 بت بالتنسيق القياسي UUID RFC 4122: ثمانية أحرف سداسية عشرية، شرطة، أربعة، شرطة، أربعة، شرطة، أربعة، شرطة، اثنا عشر حرفاً. بالنسبة لـ BLE، تُستخدم نسخة حيث الجزء الأساسي من UUID لـ Bluetooth SIG له بتات ثابتة.

يُعرّف Bluetooth SIG الـ UUID الأساسي: 0000XXXX-0000-1000-8000-00805F9B34FB. بالنسبة للخدمات القياسية 16 بت، يتم إدراج قيمة UUID في هذا القناع: على سبيل المثال، 0x180F يصبح 0000180F-0000-1000-8000-00805F9B34FB. تستخدم الخدمات المخصصة UUID مستقلاً تماماً يولده المطور.

عند إنشاء UUID مخصص، يمكنك استخدام أي مولد UUID (UUID v4). يوفر UUID v4 العشوائي 122 بت من الإنتروبيا، مما يجعل التصادمات مستحيلة عملياً. لا تستخدم نسخة معدلة من UUID الأساسي لـ Bluetooth SIG للخدمات المخصصة — فهذا ينتهك المواصفات.

كيفية الإعلان عن خدمة بـ UUID في الكود

الإعلان عن خدمة بـ UUID يتم على الجانب الطرفي عند إنشاء خادم GATT. في iOS، يُستخدم Core Bluetooth، وفي Android android.bluetooth.le. دعنا ننظر إلى كلا النهجين.

iOS: Core Bluetooth

في Swift، يتم إنشاء الخدمة عبر CBMutableService مع تحديد UUID، ثم تُضاف إليها الخصائص عبر CBMutableCharacteristic.

swift
import CoreBluetooth

// Standard 16-bit UUID
let batteryServiceUUID = CBUUID("180F")

// Custom 128-bit UUID
let customServiceUUID = CBUUID("E20A39F4-73F5-4BC4-A12F-17D1AD07A961")

let service = CBMutableService(
    type: customServiceUUID,
    primary: true
)

// Add characteristics
service.characteristics = [characteristic]

// Publish service via peripheralManager
peripheralManager.add(service)

Android: Bluetooth GATT Server

في Android، يتم تسجيل الخدمة عبر BluetoothGattServer وBluetoothGattService. يُمرر UUID كسلسلة نصية عبر java.util.UUID.fromString.

java
import android.bluetooth.*;

// Custom service UUID
private static final UUID CUSTOM_SERVICE_UUID =
    UUID.fromString("E20A39F4-73F5-4BC4-A12F-17D1AD07A961");

BluetoothGattService service = new BluetoothGattService(
    CUSTOM_SERVICE_UUID,
    BluetoothGattService.SERVICE_TYPE_PRIMARY
);

// Add characteristics
service.addCharacteristic(characteristic);

// Register on GATT server
gattServer.addService(service);

المسح الضوئي للخدمات بواسطة UUID

المسح الضوئي بواسطة Service UUID يسمح للجهاز المركزي بالعثور على الأجهزة التي توفر الخدمة المطلوبة دون الاتصال بجميع الأجهزة الطرفية المكتشفة. يمكن أن تحتوي حزمة إعلان BLE على قائمة بـ UUID الخدمات، مما يسمح للجهاز المركزي بتصفية الأجهزة في مرحلة المسح الضوئي.

في iOS، يمسح CBCentralManager الأجهزة بفلتر حسب UUID الخدمة. هذا يُقلل استهلاك الطاقة ويُسرع اكتشاف الأجهزة المطلوبة.

swift
import CoreBluetooth

let centralManager = CBCentralManager()

func scanForHeartRateMonitor() {
    let services: [CBUUID] = [
        CBUUID("180D") // Heart Rate Service
    ]
    centralManager.scanForPeripherals(
        withServices: services,
        options: nil
    )
}

// Delegate receives only Heart Rate Service devices
func centralManager(
    _ central: CBCentralManager,
    didDiscover peripheral: CBPeripheral,
    advertisementData: [String: Any],
    rssi RSSI: NSNumber
) {
    // peripheral has only devices with UUID 0x180D
}

في Android، يتم دعم التصفية بواسطة UUID أيضاً عبر ScanFilter.Builder. هذه طريقة فعالة لتضييق نطاق البحث دون الاتصال بكل جهاز.

java
import android.bluetooth.le.*;

ScanFilter filter = new ScanFilter.Builder()
    .setServiceUuid(
        new ParcelUuid(
            UUID.fromString("0000180D-0000-1000-8000-00805F9B34FB")
        )
    )
    .build();

BluetoothLeScanner scanner = bluetoothAdapter.getBluetoothLeScanner();
scanner.startScan(
    Collections.singletonList(filter),
    scanSettings,
    scanCallback
);

خدمات متعددة على جهاز واحد

جهاز BLE واحد يمكنه الإعلان عن خدمات متعددة في وقت واحد. على سبيل المثال، قد يحتوي سوار اللياقة البدنية على Battery Service (0x180F) وHeart Rate Service (0x180D) وخدمة مخصصة لمزامنة البيانات مع السحابة. كل خدمة لها UUID الخاص بها ومجموعتها الخاصة من الخصائص.

مع الخدمات المتعددة، من المهم مراعاة الحد الأقصى لحزمة الإعلان. يمكن أن تحتوي حزمة إعلان BLE على ما يصل إلى 31 بايت من البيانات. إذا كانت معرفات UUID للخدمات تشغل مساحة كبيرة جداً، فقد لا تتسع بعضها في حزمة الإعلان. في هذه الحالة، يُستخدم scan response — حزمة ثانية تُرسل بناءً على طلب الجهاز المركزي.

وفقاً لـ Bluetooth Core Specification 5.4 (2023)، الحد الأقصى لعدد الخدمات الأساسية على خادم GATT واحد غير محدد في المواصفات، لكنه عملياً محدود بذاكرة الجهاز ومتطلبات الأداء. للأجهزة المدمجة ذات ذاكرة فلاش 256 كيلوبايت، يُوصى بما لا يزيد عن 5–10 خدمات.

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

ما الفرق بين UUID 16 بت و UUID 128 بت؟

معرفات UUID 16 بت محجوزة من قبل Bluetooth SIG للخدمات القياسية وتشغل 2 بايت في حزمة الإعلان. تُستخدم معرفات UUID 128 بت للخدمات المخصصة وتشغل 16 بايت. يعتمد الاختيار على نوع الخدمة: الوظائف القياسية تستخدم UUID 16 بت، والوظائف الفريدة تستخدم UUID 128 بت.

كيفية إنشاء UUID مخصص 128 بت لخدمة BLE؟

استخدم UUID v4 — UUID عشوائي يتم إنشاؤه بواسطة أدوات عبر الإنترنت أو أمر uuidgen في الطرفية أو API للغة البرمجة الخاصة بك. مثال: UUID.fromString(UUID.randomUUID().toString()) في Java أو UUID() في Swift.

هل أحتاج لتسجيل UUID مخصص في Bluetooth SIG؟

لا، التسجيل غير مطلوب. تسجل Bluetooth SIG فقط معرفات UUID 16 بت. يتم إنشاء معرفات UUID 128 بت المخصصة بواسطة المطور بشكل مستقل وتضمن التفرد بفضل مساحة العناوين الهائلة (مجموعات 2^128).

هل يمكن أن تحتوي خدمة واحدة على خصائص متعددة؟

نعم، يمكن أن تحتوي خدمة GATT القياسية على عدد غير محدود من الخصائص. على سبيل المثال، قد يحتوي Battery Service على Battery Level (0x2A19) وBattery Power State (0x2A1A). كل خاصية لها UUID الخاص بها ومجموعة من الخصائص.

ماذا يحدث إذا استخدم جهازان نفس UUID المخصص؟

إذا تطابقت معرفات UUID، فلن يتمكن الجهاز المركزي من التمييز بين خدمة وأخرى دون معلومات إضافية. احتمال تصادم UUID v4 العشوائي ضئيل جداً — حوالي 5.3 × 10^−37. استخدم مولد UUID عشوائي، ولا تنسخ UUID من الأمثلة.

الخلاصة

  • Service UUID هو معرّف عالمي لخدمة BLE يمكن أن يكون 16 بت (قياسياً) أو 128 بت (مخصصاً).
  • خصصت Bluetooth SIG أكثر من 60 UUID قياسياً — استخدمها للتوافق مع أجهزة الشركات المصنعة الأخرى.
  • يتم إنشاء معرفات UUID 128 بت بواسطة المطور عبر UUID v4 وتضمن التفرد دون سجل مركزي.
  • أثناء المسح الضوئي، يقوم الجهاز المركزي بتصفية الأجهزة حسب Service UUID، مما يُقلل استهلاك الطاقة ويُسرع البحث.
  • يمكن لجهاز واحد الإعلان عن خدمات متعددة بمعرفات UUID مختلفة — العدد محدود بالذاكرة وحزمة الإعلان.
  • في iOS وAndroid، يتم الإعلان عن الخدمات عبر CBMutableService وBluetoothGattService على التوالي، مع تحديد UUID.
  • الاختيار الصحيح لـ UUID يؤثر على التوافق وحجم حزمة الإعلان والتشغيل الصحيح لملف GATT.

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

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

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

اقرأ أيضًا