Bluetooth Low Energy (BLE) u mobilnom razvoju: šta je to, protokoli i kako funkcioniše

Аутор: IT Sectr Објављено: 2026-07-25 Време читања: 11 мин

Bluetooth Low Energy (BLE) je standard bežične komunikacije optimizovan za prenos malih količina podataka uz minimalnu potrošnju energije. Prema Bluetooth SIG, 2025, tehnologija se koristi u više od 5 milijardi uređaja širom sveta. GATT (Generic Attribute Profile) organizuje podatke u hijerarhiju Service → Characteristic → Descriptor, koja je osnova svih BLE aplikacija za iOS i Android.

Ključne tačke

  • GATT — protokol razmene podataka u Bluetooth Low Energy sa hijerarhijom Service → Characteristic → Descriptor
  • Core Bluetooth — Apple-ov frejmvork za rad sa BLE na iOS-u, zasnovan na CBCentralManager i CBPeripheral
  • BluetoothGatt — glavni API za BLE veze na Android-u putem BluetoothLeScanner
  • iBeacon — Apple-ov protokol BLE majaka sa izvornom podrškom kroz CLLocationManager na iOS-u
  • Bonding — trajna šifrovana veza koja eliminiše ponovno skeniranje i uparivanje

Šta je Bluetooth Low Energy (BLE) i kako funkcioniše?

Bluetooth Low Energy (BLE) radi po modelu klijent-server sa dve uloge: Central (mobilni uređaj) i Peripheral (uređaj). Central skenira vazduh i pokreće vezu, dok Peripheral prenosi podatke. Za razliku od klasičnog Bluetooth-a, BLE nije namenjen za audio tokove — njegov zadatak je prenos malih paketa uz minimalnu potrošnju energije. Prema Bluetooth SIG Core Specification 5.4 (2025), BLE podržava brzinu do 2 Mbps uz struju manju od 15 mA u aktivnom režimu.

GATT hijerarhija: Service, Characteristic, Descriptor

GATT (Generic Attribute Profile) definiše strukturu podataka Bluetooth Low Energy. Service je logička grupa karakteristika (na primer, Heart Rate Service 0x180D). Characteristic je tačka podataka sa konkretnom vrednošću. Descriptor su metapodaci karakteristike, uključujući CCCD za upravljanje obaveštenjima. Svaki element ima UUID — 16-bitni za standardne Bluetooth SIG profile ili 128-bitni za prilagođene.

Bluetooth Low Energy u mobilnim aplikacijama koristi ovu hijerarhiju za organizovanje razmene podataka između pametnog telefona i periferije. Pravilno razumevanje GATT-a je osnova razvoja BLE aplikacija na obe platforme. Programer mora znati UUID-ove servisa i karakteristika uređaja, kao i svojstva svake karakteristike (read, write, notify, indicate).

Advertising Data i Scan Response

BLE uređaji prenose reklamne pakete (advertising packets) za otkrivanje. Advertising Data sadrži ime uređaja, UUID-ove servisa, RSSI i Manufacturer Specific Data. Veličina reklamnog paketa je ograničena na 31 bajt. Za prenos dodatnih podataka koristi se Scan Response — drugi paket koji centralni uređaj zahteva nakon otkrivanja.

BLE na iOS-u: Core Bluetooth, CBCentralManager, CBPeripheral

Na iOS-u, frejmvork Core Bluetooth upravlja Bluetooth Low Energy. CBCentralManager upravlja skeniranjem i vezom, CBPeripheral predstavlja udaljeni BLE uređaj. Proces je standardan: inicijalizacija CBCentralManager, provera stanja poweredOn, pokretanje scanForPeripherals, povezivanje i otkrivanje servisa. Core Bluetooth automatski upravlja napajanjem radio modula — ako se BLE ne koristi, isključuje se.

BLE u mobilnom razvoju na iOS-u zahteva uzimanje u obzir pozadinskih režima. Pozadinski režim Core Bluetooth se uključuje kroz Capabilities projekta (Uses Bluetooth LE accessories). U pozadini, aplikacija može primati obaveštenja od karakteristika, ali je skeniranje ograničeno — sistem ga ponovo pokreće samo kada se uređaj pomera. Za iBeacon, pozadinsko skeniranje radi aktivnije kroz CLLocationManager.

Primer skeniranja BLE u Swift-u

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("Pronađeno: \(peripheral.name ?? "unknown")")
    }
}

U ovom primeru, CBCentralManagerDelegate obrađuje sve događaje BLE veze. Metod centralManagerDidUpdateState proverava da li je Bluetooth uključen na mobilnom uređaju. Nakon uspešne inicijalizacije, započinje skeniranje. Callback didDiscover se poziva za svaki pronađeni uređaj.

Povezivanje i čitanje karakteristika u Core Bluetooth

Nakon otkrivanja uređaja, potrebno je pozvati connect i discoverServices. CBPeripheralDelegate pruža metode za obradu svakog koraka: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Svaki metod je asinhron — podaci stižu putem delegatskih callback-a. RSSI (Received Signal Strength Indicator) pokazuje nivo signala: što je vrednost bliža 0, to je signal jači.

BLE na Android-u: BluetoothAdapter, BluetoothGatt, BluetoothLeScanner

Na Android-u, Bluetooth Low Energy se implementira kroz paket android.bluetooth. BluetoothAdapter je ulazna tačka za sve BLE operacije. BluetoothLeScanner pokreće skeniranje sa callback-ovima ScanCallback. Nakon otkrivanja uređaja, kreira se BluetoothGatt — veza sa periferijom. BluetoothGattCallback obrađuje događaje: povezivanje, otkrivanje servisa, čitanje karakteristika, promene RSSI.

Bluetooth Low Energy u mobilnim aplikacijama na Android-u zahteva eksplicitne dozvole BLUETOOTH_SCAN, BLUETOOTH_CONNECT i ACCESS_FINE_LOCATION. Od Android 12, dozvole su razdvojene: BLUETOOTH_SCAN za skeniranje, BLUETOOTH_CONNECT za povezivanje. ACCESS_FINE_LOCATION je potrebna samo za skeniranje određenih tipova uređaja. Bez ovih dozvola, aplikacija ne može raditi sa BLE.

Primer skeniranja BLE u Kotlin-u

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", "Uređaj: ${device.name}, RSSI: $rssi")
        }
    }
}

ScanSettings omogućava konfigurisanje režima skeniranja: LOW_POWER za uštedu baterije, BALANCED za standardne zadatke, LOW_LATENCY za maksimalnu brzinu otkrivanja. ScanFilter sužava pretragu po UUID servisa, imenu uređaja ili MAC adresi. Filtriranje smanjuje potrošnju energije i ubrzava otkrivanje željenog uređaja.

BluetoothGatt: čitanje i obaveštenja na Android-u

Nakon kreiranja BluetoothGatt kroz connectGatt, aplikacija poziva discoverServices. BluetoothGattCallback sadrži onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Za primanje obaveštenja o promenama karakteristike, potrebno je pozvati setCharacteristicNotification. Proces zahteva pažnju: svaka GATT operacija je asinhrona, a rezultat stiže u posebnom callback-u.

iBeacon, Bonding i Advertising Data u BLE ekosistemu

iBeacon je Apple-ova tehnologija za BLE majake koji prenose UUID, Major i Minor. Uređaj-majak emituje reklamni paket, a mobilna aplikacija na osnovu ovih podataka određuje lokaciju i udaljenost. Na iOS-u, iBeacon je izvorno podržan kroz CLLocationManager. Na Android-u je potrebna biblioteka treće strane (na primer, AltBeacon ili Android iBeacon Library).

Bonding je procedura kreiranja trajne sigurne veze između BLE uređaja. Nakon Bonding-a, ključevi šifrovanja se čuvaju i uređaji se automatski povezuju kada se ponovo približe. Na iOS-u, bonding se upravlja automatski od strane sistema. Na Android-u — kroz BluetoothDevice.createBond(). Bonding je važan za nosive uređaje i fitnes trackere koji zahtevaju brzo ponovno povezivanje.

Reklamni paketi i Manufacturer Specific Data

Advertising Data je ključni mehanizam otkrivanja u Bluetooth Low Energy. Proizvođači uređaja mogu dodati Manufacturer Specific Data u reklamni paket za prenos prilagođenih podataka. Format paketa uključuje Company Identifier (2 bajta) i proizvoljne podatke. Na iOS-u, CBCentralManager prihvata niz UUID-ova servisa za filtriranje — to štedi bateriju. Na Android-u, ScanFilter radi na istom principu.

Poređenje iOS i Android za BLE razvoj

ParametariOS (Core Bluetooth)Android (BluetoothGatt)
MenadžerCBCentralManagerBluetoothLeScanner
Vezaconnect(to:)connectGatt()
ServisidiscoverServices()discoverServices()
ČitanjereadValue(for:)readCharacteristic()
ObaveštenjasetNotifyValue(_:for:)setCharacteristicNotification()
DozvoleAutomatskeBLUETOOTH_SCAN, BLUETOOTH_CONNECT
iBeaconCLLocationManager (izvorno)AltBeacon / biblioteke

Optimizacija BLE: MTU, Connection Interval i pozadinski režim

MTU (Maximum Transmission Unit) je maksimalna veličina jednog paketa podataka Bluetooth Low Energy. Podrazumevano, MTU iznosi 23 bajta (3 bajta zaglavlja + 20 bajta podataka). Povećanje MTU na 512 bajta značajno ubrzava prenos prilikom razmene konfiguracija ili logova. Na iOS-u, maximumWriteValueLength pokazuje dostupni MTU. Na Android-u, za povećanje MTU koristi se requestMtu().

Connection Interval je frekvencija kojom centralni uređaj anketira periferiju. Što je interval kraći, to je veća brzina prenosa, ali i potrošnja energije. Tipične vrednosti su od 7,5 ms do 4 sekunde. Za fitnes trackere, 100 ms je dovoljno; za audio — 7,5 ms. BLE u mobilnom razvoju zahteva balans između brzine prenosa i trajanja baterije uređaja.

Pozadinski režim na iOS i Android

iOS podržava BLE u pozadinskom režimu kroz Background Modes, ali sa ograničenjima. Aplikacija u pozadini prima obaveštenja od karakteristika, ali ne može aktivno skenirati. Sistem ponovo pokreće skeniranje kada se lokacija uređaja promeni. Na Android-u, pozadinsko skeniranje zahteva Foreground Service sa stalnim obaveštenjem. Bez toga, mobilni sistem će ubiti proces prilikom minimiziranja aplikacije.

Praktične preporuke za optimizaciju

Za pouzdan rad BLE u mobilnim aplikacijama, sledite ova pravila. Koristite notify umesto polling-a — karakteristika sa obaveštenjima šalje podatke prilikom promene, štedeći bateriju. Postavite optimalni MTU na početku veze. Filtrirajte uređaje po UUID servisa prilikom skeniranja. Proverite kompatibilnost BLE steka na različitim modelima — proizvođači (Xiaomi, Huawei, Samsung) unose promene koje utiču na ponašanje Bluetooth-a.

Često postavljana pitanja

Po čemu se BLE razlikuje od klasičnog Bluetooth-a?

Bluetooth Low Energy (BLE) je optimizovan za periodični prenos malih paketa sa niskom potrošnjom energije. Klasični Bluetooth je namenjen za audio tokove i kontinuirani prenos velikih količina podataka.

Šta je GATT u Bluetooth Low Energy?

GATT (Generic Attribute Profile) je protokol razmene podataka u BLE koji definiše hijerarhiju Service → Characteristic → Descriptor. GATT se koristi za čitanje, pisanje i primanje obaveštenja od BLE uređaja.

Zašto Android zahteva dozvolu ACCESS_FINE_LOCATION za BLE?

Pre Android 12, BLE skeniranje se moglo koristiti za određivanje lokacije, pa je Google objedinio ove dozvole. Od Android 12, uvedena je posebna dozvola BLUETOOTH_SCAN bez povezivanja sa lokacijom.

Kako povećati brzinu prenosa podataka putem BLE?

Povećajte MTU kroz requestMtu() na Android-u i maximumWriteValueLength na iOS-u. Connection Interval takođe utiče na brzinu — što je manji, to je prenos brži. Optimalna kombinacija daje poboljšanje do 10 puta.

Šta je Bonding u BLE?

Bonding je procedura kreiranja trajne sigurne veze između BLE uređaja. Nakon Bonding-a, ključevi šifrovanja se čuvaju i uređaji se automatski povezuju bez ponovnog traženja.

Rezime

  • Bluetooth Low Energy — standard bežične komunikacije za IoT sa minimalnom potrošnjom energije i brzinom do 2 Mbps
  • GATT organizuje podatke u hijerarhiju Service → Characteristic → Descriptor sa UUID za svaki element
  • Core Bluetooth — Apple-ov frejmvork za BLE na iOS-u sa CBCentralManager, CBPeripheral i pozadinskim režimima
  • BluetoothGatt — glavni Android API sa BluetoothAdapter, BluetoothLeScanner i eksplicitnim BLUETOOTH_SCAN dozvolama
  • iBeacon — BLE majak tehnologija sa izvornom podrškom na iOS-u kroz CLLocationManager
  • Bonding omogućava automatsko ponovno povezivanje nakon čuvanja ključeva šifrovanja
  • Bluetooth Low Energy u mobilnim aplikacijama zahteva uzimanje u obzir MTU, Connection Interval i pozadinskih ograničenja platformi

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту