Bluetooth Low Energy (BLE) în dezvoltarea mobilă: ce este, protocoale și cum funcționează

Autor: IT Sectr Publicat: 2026-07-25 Timp de citire: 11 min

Bluetooth Low Energy (BLE) este un standard de comunicație wireless optimizat pentru transmiterea unor volume mici de date cu un consum minim de energie. Potrivit Bluetooth SIG, 2025, tehnologia este utilizată în peste 5 miliarde de dispozitive în întreaga lume. GATT (Generic Attribute Profile) organizează datele într-o ierarhie Service → Characteristic → Descriptor, care stă la baza tuturor aplicațiilor BLE pentru iOS și Android.

Puncte Cheie

  • GATT — protocol de schimb de date în Bluetooth Low Energy cu ierarhie Service → Characteristic → Descriptor
  • Core Bluetooth — framework Apple pentru lucrul cu BLE pe iOS, bazat pe CBCentralManager și CBPeripheral
  • BluetoothGatt — API principal pentru conexiuni BLE pe Android prin BluetoothLeScanner
  • iBeacon — protocol beacon BLE Apple cu suport nativ prin CLLocationManager pe iOS
  • Bonding — conexiune criptată permanentă care elimină scanarea și împerecherea repetate

Ce este Bluetooth Low Energy (BLE) și cum funcționează?

Bluetooth Low Energy (BLE) funcționează după un model client-server cu două roluri: Central (dispozitiv mobil) și Peripheral (dispozitiv). Central scanează undele și inițiază conexiunea, în timp ce Peripheral transmite date. Spre deosebire de Bluetooth clasic, BLE nu este conceput pentru fluxuri audio — sarcina sa este să transmită pachete mici cu un consum minim de energie. Conform Bluetooth SIG Core Specification 5.4 (2025), BLE suportă viteze de până la 2 Mbps cu un curent mai mic de 15 mA în modul activ.

Ierarhia GATT: Service, Characteristic, Descriptor

GATT (Generic Attribute Profile) definește structura de date a Bluetooth Low Energy. Service este un grup logic de caracteristici (de exemplu, Heart Rate Service 0x180D). Characteristic este un punct de date cu o valoare specifică. Descriptor sunt metadate ale caracteristicii, inclusiv CCCD pentru gestionarea notificărilor. Fiecare element are un UUID — 16 biți pentru profiluri standard Bluetooth SIG sau 128 biți pentru personalizate.

Bluetooth Low Energy în aplicațiile mobile utilizează această ierarhie pentru a organiza schimbul de date între un smartphone și periferice. O înțelegere corectă a GATT este baza dezvoltării aplicațiilor BLE pe ambele platforme. Dezvoltatorul trebuie să cunoască UUID-urile serviciilor și caracteristicilor dispozitivului, precum și proprietățile fiecărei caracteristici (read, write, notify, indicate).

Advertising Data și Scan Response

Dispozitivele BLE transmit pachete publicitare (advertising packets) pentru detectare. Advertising Data conține numele dispozitivului, UUID-urile serviciilor, RSSI și Manufacturer Specific Data. Dimensiunea pachetului publicitar este limitată la 31 de octeți. Pentru a transmite date suplimentare, se utilizează Scan Response — un al doilea pachet pe care dispozitivul central îl solicită după detectare.

BLE pe iOS: Core Bluetooth, CBCentralManager, CBPeripheral

Pe iOS, framework-ul Core Bluetooth gestionează Bluetooth Low Energy. CBCentralManager administrează scanarea și conexiunea, CBPeripheral reprezintă un dispozitiv BLE la distanță. Procesul este standard: inițializarea CBCentralManager, verificarea stării poweredOn, pornirea scanForPeripherals, conectarea și descoperirea serviciilor. Core Bluetooth gestionează automat alimentarea modulului radio — dacă BLE nu este utilizat, se oprește.

BLE în dezvoltarea mobilă pe iOS necesită luarea în considerare a modurilor de fundal. Modul fundal Core Bluetooth se activează prin Capabilities ale proiectului (Uses Bluetooth LE accessories). În fundal, aplicația poate primi notificări de la caracteristici, dar scanarea este limitată — sistemul o repornește doar când dispozitivul se mișcă. Pentru iBeacon, scanarea în fundal funcționează mai activ prin CLLocationManager.

Exemplu de scanare BLE în 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("Găsit: \(peripheral.name ?? "unknown")")
    }
}

În acest exemplu, CBCentralManagerDelegate gestionează toate evenimentele conexiunii BLE. Metoda centralManagerDidUpdateState verifică dacă Bluetooth este activat pe dispozitivul mobil. După inițializarea reușită, scanarea începe. Callback-ul didDiscover este invocat pentru fiecare dispozitiv găsit.

Conectarea și citirea caracteristicilor în Core Bluetooth

După descoperirea unui dispozitiv, trebuie apelate connect și discoverServices. CBPeripheralDelegate oferă metode pentru gestionarea fiecărui pas: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Fiecare metodă este asincronă — datele sosesc prin callback-uri delegate. RSSI (Received Signal Strength Indicator) arată nivelul semnalului: cu cât valoarea este mai aproape de 0, cu atât semnalul este mai puternic.

BLE pe Android: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

Pe Android, Bluetooth Low Energy este implementat prin pachetul android.bluetooth. BluetoothAdapter este punctul de intrare pentru toate operațiunile BLE. BluetoothLeScanner pornește scanarea cu callback-uri ScanCallback. După descoperirea unui dispozitiv, se creează BluetoothGatt — o conexiune la periferic. BluetoothGattCallback gestionează evenimente: conexiune, descoperirea serviciilor, citirea caracteristicilor, schimbări RSSI.

Bluetooth Low Energy în aplicațiile mobile pe Android necesită permisiuni explicite BLUETOOTH_SCAN, BLUETOOTH_CONNECT și ACCESS_FINE_LOCATION. Începând cu Android 12, permisiunile sunt separate: BLUETOOTH_SCAN pentru scanare, BLUETOOTH_CONNECT pentru conectare. ACCESS_FINE_LOCATION este necesară doar pentru scanarea anumitor tipuri de dispozitive. Fără aceste permisiuni, aplicația nu poate funcționa cu BLE.

Exemplu de scanare BLE în 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", "Dispozitiv: ${device.name}, RSSI: $rssi")
        }
    }
}

ScanSettings permite configurarea modului de scanare: LOW_POWER pentru economisirea bateriei, BALANCED pentru sarcini standard, LOW_LATENCY pentru viteză maximă de detectare. ScanFilter restrânge căutarea după UUID-ul serviciului, numele dispozitivului sau adresa MAC. Filtrarea reduce consumul de energie și accelerează detectarea dispozitivului dorit.

BluetoothGatt: citire și notificări pe Android

După crearea BluetoothGatt prin connectGatt, aplicația apelează discoverServices. BluetoothGattCallback conține onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Pentru a primi notificări despre modificările caracteristicilor, trebuie apelat setCharacteristicNotification. Procesul necesită atenție: fiecare operațiune GATT este asincronă, iar rezultatul sosește într-un callback separat.

iBeacon, Bonding și Advertising Data în ecosistemul BLE

iBeacon este tehnologia Apple pentru beacon-uri BLE care transmit UUID, Major și Minor. Dispozitivul beacon difuzează un pachet publicitar, iar aplicația mobilă determină locația și distanța pe baza acestor date. Pe iOS, iBeacon este suportat nativ prin CLLocationManager. Pe Android, este necesară o bibliotecă terță (de exemplu, AltBeacon sau Android iBeacon Library).

Bonding este procedura de creare a unei conexiuni sigure permanente între dispozitive BLE. După Bonding, cheile de criptare sunt salvate, iar dispozitivele se conectează automat când se apropie din nou. Pe iOS, bonding este gestionat automat de sistem. Pe Android — prin BluetoothDevice.createBond(). Bonding este important pentru dispozitivele purtabile și trackerele de fitness care necesită reconectare rapidă.

Pachete publicitare și Manufacturer Specific Data

Advertising Data este un mecanism cheie de detectare în Bluetooth Low Energy. Producătorii de dispozitive pot adăuga Manufacturer Specific Data în pachetul publicitar pentru a transmite date personalizate. Formatul pachetului include un Company Identifier (2 octeți) și date arbitrare. Pe iOS, CBCentralManager acceptă un array de UUID-uri de servicii pentru filtrare — acest lucru economisește bateria. Pe Android, ScanFilter funcționează pe același principiu.

Comparație între iOS și Android pentru dezvoltarea BLE

ParametruiOS (Core Bluetooth)Android (BluetoothGatt)
ManagerCBCentralManagerBluetoothLeScanner
Conexiuneconnect(to:)connectGatt()
ServiciidiscoverServices()discoverServices()
CitirereadValue(for:)readCharacteristic()
NotificărisetNotifyValue(_:for:)setCharacteristicNotification()
PermisiuniAutomaticeBLUETOOTH_SCAN, BLUETOOTH_CONNECT
iBeaconCLLocationManager (nativ)AltBeacon / biblioteci

Optimizare BLE: MTU, Connection Interval și modul fundal

MTU (Maximum Transmission Unit) este dimensiunea maximă a unui singur pachet de date Bluetooth Low Energy. În mod implicit, MTU este de 23 de octeți (3 octeți antet + 20 de octeți date). Creșterea MTU la 512 octeți accelerează semnificativ transmisia la schimbul de configurații sau jurnale. Pe iOS, maximumWriteValueLength arată MTU-ul disponibil. Pe Android, pentru creșterea MTU se utilizează requestMtu().

Connection Interval este frecvența cu care dispozitivul central interoghează perifericul. Cu cât intervalul este mai scurt, cu atât viteza de transmisie este mai mare, dar și consumul de energie. Valorile tipice variază de la 7,5 ms la 4 secunde. Pentru trackerele de fitness, 100 ms sunt suficiente; pentru audio — 7,5 ms. BLE în dezvoltarea mobilă necesită un echilibru între viteza de transmisie și durata de viață a bateriei dispozitivului.

Modul fundal pe iOS și Android

iOS suportă BLE în modul fundal prin Background Modes, dar cu limitări. O aplicație în fundal primește notificări de la caracteristici, dar nu poate scana activ. Sistemul repornește scanarea când locația dispozitivului se schimbă. Pe Android, scanarea în fundal necesită un Foreground Service cu o notificare persistentă. Fără acesta, sistemul mobil va ucide procesul la minimizarea aplicației.

Recomandări practice de optimizare

Pentru o funcționare fiabilă a BLE în aplicațiile mobile, urmați aceste reguli. Folosiți notify în loc de polling — o caracteristică cu notificări trimite date la modificare, economisind bateria. Setați MTU-ul optim la începutul conexiunii. Filtrați dispozitivele după UUID-ul serviciului la scanare. Verificați compatibilitatea stivei BLE pe diferite modele — producătorii (Xiaomi, Huawei, Samsung) fac modificări care afectează comportamentul Bluetooth.

Întrebări Frecvente

Prin ce se deosebește BLE de Bluetooth-ul clasic?

Bluetooth Low Energy (BLE) este optimizat pentru transmiterea periodică a pachetelor mici cu consum redus de energie. Bluetooth-ul clasic este proiectat pentru fluxuri audio și transmiterea continuă a unor volume mari de date.

Ce este GATT în Bluetooth Low Energy?

GATT (Generic Attribute Profile) este un protocol de schimb de date în BLE care definește ierarhia Service → Characteristic → Descriptor. GATT este utilizat pentru citirea, scrierea și primirea de notificări de la dispozitivele BLE.

De ce Android necesită permisiunea ACCESS_FINE_LOCATION pentru BLE?

Înainte de Android 12, scanarea BLE putea fi folosită pentru determinarea locației, așa că Google a combinat aceste permisiuni. Începând cu Android 12, a fost introdusă o permisiune separată BLUETOOTH_SCAN fără legătură cu locația.

Cum se crește viteza de transfer de date prin BLE?

Măriți MTU-ul prin requestMtu() pe Android și maximumWriteValueLength pe iOS. Connection Interval afectează, de asemenea, viteza — cu cât este mai mic, cu atât transferul este mai rapid. Combinația optimă oferă o îmbunătățire de până la 10 ori.

Ce este Bonding în BLE?

Bonding este procedura de creare a unei conexiuni sigure permanente între dispozitive BLE. După Bonding, cheile de criptare sunt salvate, iar dispozitivele se conectează automat fără căutare repetată.

Rezumat

  • Bluetooth Low Energy — standard de comunicație wireless pentru IoT cu consum minim de energie și viteză de până la 2 Mbps
  • GATT organizează datele într-o ierarhie Service → Characteristic → Descriptor cu UUID-uri pentru fiecare element
  • Core Bluetooth — framework Apple pentru BLE pe iOS cu CBCentralManager, CBPeripheral și moduri fundal
  • BluetoothGatt — API principal Android cu BluetoothAdapter, BluetoothLeScanner și permisiuni explicite BLUETOOTH_SCAN
  • iBeacon — tehnologie beacon BLE cu suport nativ pe iOS prin CLLocationManager
  • Bonding permite reconectarea automată după salvarea cheilor de criptare
  • Bluetooth Low Energy în aplicațiile mobile necesită luarea în considerare a MTU, Connection Interval și a limitărilor de fundal ale platformelor

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul