Acest tutorial vă va ghida prin noua tehnologie iBeacons. Pentru a explica această tehnologie într-un mod interesant, veți crea o aplicație "fierbinte și rece" în acest tutorial. Aplicația va analiza regiunea de baliză și vă va informa în consecință.
iBeacon este o tehnologie introdusă în iOS 7, care vă permite să adăugați monitorizarea exactă a regiunii de localizare la aplicația dvs. In ciuda faptului ca iBeacon
este clasificat ca o tehnologie Core Location, iBeacon utilizează tehnologia Bluetooth low energy.
iBeacons suportă trei tipuri de profiluri de distanță între iBeacon și dispozitiv: imediat, lângă, și departe. Prin aceste distanțe, este posibilă urmărirea mișcării dispozitivului în cadrul gamei iBeacon. iBeacons lucrează în comun cu monitorizarea specifică a regiunii. O aplicație iOS poate fi configurată pentru a verifica o anumită semnătură iBeacon, iar atunci când dispozitivul iOS se află în apropierea acelui iBeacon, aplicația îl notifică pe utilizator.
Pentru a transforma un dispozitiv iOS 7 într-un iBeacon, trebuie să creați o instanță de CLBeaconRegion
. Trebuie să fie creat cu UUID
și Identificator
proprietăți. Cu toate acestea, puteți declara și defini și două alte proprietăți (care nu sunt necesare): Valoare majoră
și Valoare mică
.
Rețineți că UUID este un identificator unic iBeacon. Astfel, parametrul UUID trebuie să fie unic pentru aplicația dvs. Dacă aplicația dvs. utilizează mai multe dispozitive ca iBeacon, aceștia ar trebui să aibă toate aceleași UUID-uri. În acest caz, ar trebui să configurați iBeaconii după valoarea de proximitate, utilizând valoarea majoră și minoră, creând astfel grupuri singulare care identifică fiecare iBeacon.
Din moment ce știți acum ce este un iBeacon și proprietățile lui de bază, putem implementa un iBeacon. Pentru a finaliza cu succes acest tutorial, aveți nevoie de două dispozitive iOS cu suport Bluetooth 4.0 (iPhone 4 sau superior). Unul dintre dispozitive creează și notifică iBeacon, în timp ce celălalt primește semnalul și prezintă informații privind distanța acestui dispozitiv la iBeacon.
Acesta este rezultatul final:
Ilustrația rezultatului finalDeoarece obiectivul acestui tutorial este de a vă învăța cum să creați și să implementați un iBeacon, vă vom oferi un exemplu de cod cu mai multe vizualizări și obiecte deja definite. Puteți descărca exemplul de cod la începutul acestei pagini.
Cu toate acestea, codul eșantionului conține următoarele:
ViewController
cu două butoane (Trimite iBeacon și să primească iBeacon Proximitatea mea
).SendViewController
care creează un iBeacon personalizat.GetViewController
care primește iBeaconul și prezintă informațiile referitoare la distanța până la acel iBeacon.Toate vizualizările sunt deja plasate și definite corect. Trebuie doar să adăugați codul pentru procesul iBeacon. Deschideți proiectul, rulați-l și jucați cu obiectele pentru a vă familiariza cu codul. Următoarea imagine prezintă imaginea pe care o veți vedea când executați proiectul prima oară.
Rețineți că, așa cum am menționat mai sus, sunt incluse două cadre:
#import#import
Dacă doriți (sau aveți nevoie de), puteți consulta documentația cadru-cadru a ambelor CoreLocation
și CoreBluetooth.
Sa trecem la treaba! Primul nostru pas este să ne concentrăm pe SendViewController.h
fişier. Aici veți defini proprietățile inerente definiției iBeacon și delegatul adecvat.
Aveți nevoie de trei proprietăți pentru a crea iBeacon: a CLBeaconRegion
, A CBPeripheralManager
, și a NSDictionary
. CLBeaconRegion
obiect definește un tip de regiune care se bazează pe apropierea dispozitivului de un baliză Bluetooth. Căutați dispozitive ale căror informații de identificare se potrivesc cu informațiile pe care le furnizați. Atunci când aparatul intră în raza de acțiune, regiunea declanșează livrarea unei notificări corespunzătoare. CBPeripheralManager
obiectul gestionează serviciile publicate în baza de date generică a profilului generic al profilului dispozitivului periferic (GATT) și promovează aceste servicii către dispozitivele centrale. În cele din urmă, NSDictionary
stochează informațiile care vor fi ulterior publicate. Acestea fiind spuse, următorul fragment vă va ajuta să creați aceste proprietăți:
@property (puternic, nonatomic) CLBeaconRegion * beaconRegion; @property (puternic, nonatomic) NSDictionary * beaconPeripheralData; @property (puternic, nonatomic) CBPeripheralManager * peripheralManager;
În ceea ce privește delegatul, veți folosi CBPeripheralManagerDelegate
. Acest protocol este utilizat de delegat pentru a verifica publicarea și publicitatea și pentru a monitoriza solicitările de citire, scriere și abonare de la dispozitivele centrale la distanță.
@ interfață SendViewController: ViewController < CBPeripheralManagerDelegate>
Salvați proiectul și treceți la SendViewController.m
fişier. Un avertisment vă va aștepta. Înainte de a remedia problema, inițializați și alocați resurse pentru proprietățile anterioare. În - (Void) viewDidLoad
metodă ar trebui mai întâi să începeți să inițializați beaconRegion utilizând un UUID unic. UUID poate fi generat folosind Terminal.app și comanda uuidgen
.
Aici _beaconRegion Obiectul este inițializat folosind patru proprietăți (două obligatorii și două opționale). Rețineți că puteți să o inițializați cu trei metode diferite (verificați documentația). Prima proprietate este UUID-ul unic, al doilea și al treilea sunt opționale și sunt corelate cu specificațiile din interiorul aplicației (grupul și grupul de baliză din interiorul grupului). Ultima proprietate este identificatorul iBeacon. Fragmentul este:
NSUUID * uuid = [[NSUUID alocare] initWithUUIDString: @ "F2037E44-13BF-4083-A3A6-514A17BBBA10"]; _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID: uuid major: 1 minor: 1 identificator: @ "com.MobileTuts.iBeacons"];
Pentru a oferi feedback utilizatorului, actualizați eticheta cu UUID generat înainte de:
_uuidLabel.text = _beaconRegion.proximityUUID.UUIDString;
Acum trebuie să inițializați cele două proprietăți ale clasei rămase. _beaconPeripheralData cheamă _beaconregion peripheralDataWithMeasuredPower
care recuperează date care pot fi folosite pentru a face publicitate dispozitivului curent ca un baliză. _peripheralManager este inițializată cu delegatul pentru a primi evenimentele de rol periferic, coada de expediere pentru expedierea evenimentelor de rol periferic și un dicționar opțional care conține opțiunile de inițializare pentru un manager periferic. Iată fragmentul complet:
_beaconPeripheralData = [beaconRegion PerifericDataWithMeasuredPower: zero]; _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate: coada de sine: opțiuni nul: nil];
În acest moment, ați alocat resursele necesare, deci trebuie doar să remediați avertismentul. Adaugă -(void) peripheralManagerDidUpdateState: (CBPeripheralManager *) periferic
metoda delegată. Această metodă este utilizată pentru a verifica starea dispozitivului și luând în considerare starea, aplicația acționează corespunzător. În acest caz, dacă statul este CBPeripheralManagerStatePoweredOn
, aplicația va începe publicitatea. Există mai multe stări disponibile. Într-o aplicație reală ar trebui să le testați pe toate. Statele sunt:
Iată o metodă completă de implementat:
-(void) peripheralManagerDidUpdateState: (CBPeripheralManager *) periferic if (peripheral.state == CBPeripheralManagerStatePoweredOn) NSLog (@ "On"); [_peripheralManager startAdvertising: _beaconPeripheralData]; altfel dacă (peripheral.state == CBPeripheralManagerStatePoweredOff) NSLog (@ "Off"); [stopperManager stopPublicitate];
În acest moment aveți iBeacon creat și configurat. Acum puteți începe publicitatea iBeacon. Cu toate acestea, trebuie să implementați o aplicație client pentru a încerca. Următorul pas vă va îndruma pentru a realiza acest lucru. Următoarea imagine prezintă interfața utilizator pe care ar trebui să o vedeți când rulați aplicația.
Pentru a schimba vederea la GetViewController.h
clasa definesc două obiecte, una CLBeaconRegion
si celalalt CLLocationManager
. CLBeaconRegion
este similar cu definiția menționată anterior și nu trebuie să aveți nici o dificultate în procesul de creare. CLLocationManager
definește interfața pentru configurarea livrării evenimentelor legate de locație în aplicația dvs..
@property (puternic, nonatomic) CLBeaconRegion * beaconRegion; @property (puternic, nonatomic) CLLocationManager * locationManager;
În plus, trebuie să definiți un delegat de protocol, de data aceasta CLLocationManagerDelegate
.
@ interfață GetViewController: ViewController
Acum treceți la GetViewController.m
și să permitem și să inițializăm obiectele. _locationManager este simplu și trebuie să setați delegatul la sine. Apoi, trebuie să creați un UUID și să definiți _beaconRegion. În plus, trebuie să definiți o regiune pentru monitorizare. În acest caz, veți monitoriza _beaconRegion regiune.
_locationManager = [[CLLocationManager alocare] init]; _locationManager.delegate = auto; NSUUID * uuid = [[NSUUID alocare] initWithUUIDString: @ "F2037E44-13BF-4083-A3A6-514A17BBBA10"]; _beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID: identificator uuid: @ "com.MobileTuts.iBeacons"]; [_locationManager startMonitoringForRegion: _beaconRegion];
Acum trebuie să definiți următoarele trei metode:
Numele sunt explicative, dar prima spune delegatului că utilizatorul a intrat în regiunea specificată. Cel de-al doilea îi spune delegatului că utilizatorul a părăsit regiunea specificată, iar ultima îi spune delegatului că unul sau mai multe faruri se află în raza de acțiune. Ultima metodă este obligatorie.
Prima metodă începe să furnizeze notificări pentru balize în regiunea specificată, în timp ce a doua face contrariul. Acesta oprește livrarea de notificări pentru balize în regiunea specificată. Metodele complete sunt:
- (void) locationManager: (CLLocationManager *) manager didEnterRegion: (CLRegion *) regiune NSLog (@ "Beacon Found"); [_locationManager startRangingBeaconsInregiune: _beaconRegion]; - (void) locationManager: (managerul CLLocationManager *) a făcutExitRegion: (CLRegion *) regiunea NSLog (@ "Regiunea stângă"); [_locationManager stopRangingBeaconsInRegion: _beaconRegion];
În cele din urmă, ultima metodă dobândește datele balizelor disponibile și transformă acele date în orice formă vrea utilizatorul. Pentru a primi corect datele, creați un CLBeacon
obiect. Actualizează eticheta și modifică culoarea fundalului, luând în considerare distanța de pe iBeacon. Codul sursă complet al metodei este următorul:
-(void) locationManager: (managerul CLLocationManager *) didRangeBeacons: (NSArray *) balize în Regiune: (CLBeaconRegion *) regiune CLBeacon * beacon = [[CLBeacon alloc] init]; beacon = [beacons lastObject]; auto.UUID.text = beacon.proximityUUID.UUIDString; dacă (beacon.proximity == CLProximityUnknown) _distanceLabel.text = @ "Proximity Unknown"; [_view setBackgroundColor: [UICcolor blackColor]]; altfel dacă (beacon.proximity == CLProximitateImediată) _distanceLabel.text = @ "Imediat"; [_view setBackgroundColor: [UICoror redColor]]; altfel dacă (beacon.proximity == CLProximityNear) _distanceLabel.text = @ "Aproape"; [_view setBackgroundColor: [UICcolororcolor]]; altfel dacă (beacon.proximity == CLProximityFar) _distanceLabel.text = @ "Far"; [_view setBackgroundColor: [UICcolor blueColor]];
Acuma poți Alerga
app (în două dispozitive separate) și să testați balizele. Rețineți că trebuie să părăsiți ambele dispozitive între cinci și cincisprezece metri pentru a părăsi și a reintra în zona predefinită. Cu toate acestea, există o soluție simplă pe care o puteți aplica pentru a testa aplicația fără a fi nevoie să mutați acel spațiu. Trebuie să declarați o metodă suplimentară (- (void) locationManager: (Manager CLLocationManager *) didStartMonitoringForRegion: (CLRegion *) regiune
) care afirmă că regiunea este legată direct de regiunea acestui far.
- (void) locationManager: (managerul CLLocationManager *) didStartMonitoringForRegion: (CLRegion *) regiune [_locationManager startRangingBeaconsInRegion: _beaconRegion];
În plus, trebuie să apelați manual această metodă în receiveiBeacon: (id) expeditor
.
[self locationManager: _locationManager a făcutStartMonitoringForRegion: _beaconRegion];
Alerga
proiectul și testați caracteristicile! Deplasați-vă de dispozitivul iBeacon și verificați interfața. Ar trebui să obțineți ecrane ca următoarele imagini când vă aflați la o distanță apropiată:
Sau aceasta când sunteți departe de dispozitivul iBeacon:
Ilustrația unei distanțe lungiLa sfârșitul acestui tutorial ar trebui să puteți defini, configura și utiliza iBeacons. Dacă aveți întrebări sau comentarii, nu ezitați să le lăsați mai jos!