iOS

Apple'ın Yeni İşaret Fişeği iBeacon

iBeacon teknolojisinin iOS7 ile birlikte hayata geçmesi uygulama geliştiricileri heyecanlandırdı. Kısaca iBeacon, düşük enerji tüketen ve kısa mesafe (50 m) konum izleme olanağı sağlayan bir donanımdır. iBeacon'ı GPS, baz istasyonu üçgenleme (triangulation) ve WiFi gibi bölge izleme teknikleri...

Abdulbasıt Tanhan |

27.12.2013

iBeacon teknolojisinin iOS7 ile birlikte hayata geçmesi uygulama geliştiricileri heyecanlandırdı. Kısaca iBeacon, düşük enerji tüketen ve kısa mesafe (50 m) konum izleme olanağı sağlayan bir donanımdır. iBeacon'ı GPS, baz istasyonu üçgenleme (triangulation) ve WiFi gibi bölge izleme tekniklerinden ayıran, hassas ölçüm değerleri ve doğruluğudur (accuracy). Bu teknolojinin sadece konum izleme alanında kullanacağını düşünmek yanlış olur. iBeacon protokolü ile NFC gibi kısa mesafeden bilgi alışverişi yapılabiliyor ki, bu da mobil ödeme alanında Apple'ın farklı bir pazar yaratacağını gösteriyor. Bu özelliği kullanabilmek için herhangi bir Bluetooth cihazıyla eşleşmenize gerek yok. Sadece telefonunuzun Bluetooth işlevinin açık olması yeterli. Bu kadarı teknolojinin yenilikçi, ulaşılabilir ve kolay kullanılabilir olmasını sağlıyor.

iBeacon teknolojisinin temelinde yeni Bluetooth Low Energy (BLE, Bluetooth 4.0 yani Bluetooth Düşük Enerji) teknolojisi yatıyor. iBeacon, yayın yapmasını istediğimiz bölgelere yerleştirebileceğiniz bir donanımdan oluşuyor. BLE destekleyen herhangi bir iOS7 cihazınız iBeacon olabiliyor. Bu özelliğe sahip iOS7 cihazlar iPhone 4S ve sonrası, 5. nesil iPod Touch, iPad 3 ve sonrası, 3. nesil Apple TV ve iPad Mini.

iBeacon protokollerini kullanarak BLE cihazlarını üretmeye başlayan firmalara Estimote ve PayPal'ı örnek verebiliriz. Estimote firmasının ürettiği şık tasarımlı beacon donanımı, bir saat pili ile iki sene çalışabiliyor.

iBeacon donanımınızın belirli bir kimlik (ID) ile yayın yapmasını sağlayıp, uygulamanızın aynı kimlikli donanımdan gelen sinyallere ilgili olduğunuzu belirtmeniz yeterli. Daha sonrasında telefonunuz, ilgili olduğunuzu belirttiğiniz iBeacon sinyallerini yakaladığında uygulamanızla iletişime geçmiş oluyor. Uygulamanızın tepki verebilmesi için arka planda çalışması yeterli. Böylece telefonunuz açık değilken bile bir bildirim ile uygulamanızı harekete geçirme şansınız olabiliyor. Buna ek olarak beacon'lara olan yakınlığınızı 50 metreye kadar gerçek zamanlı izleyebilir ve bu uzaklığı yanında (immediate), yakın (near) ve uzak (far) kademeleriyle takip edebilirsiniz.

Kullanım alanları için

  • Mağazanızın önünden ya da restoranınızın yakınından geçenlere kupon, reklam yollamak,
  • Mobil cüzdan gibi ödeme sistemlerini tetiklemek,
  • Müzelerde veya kütüphanelerde yaklaştığınız eser, kitap veya raf hakkında bilgi vermek, içeriğe yönlendirmek

örnekleri verilebilir.

iBeacon'ın sahadaki ilk deneyimlerinden biri, 24 Eylül'de 3. nesil Apple TV kurulumunda yaşandı. Kullanıcılar telefonlarını Apple TV cihazlarına dokundurarak iOS7 yüklü cihazlarındaki kullanıcı bilgileriyle kurulum yapma şansına sahip oldu.

Yakın zamanda demo edilen bir örnek Amerikan Beyzbol Ligi'nden. Uygulama iBeacon yerleştirilmiş turnikelere yaklaştığınızda barkodunuzu ekrana getiriyor ve oturduğunuz yerin konumunu gösteriyor. Uygulama yakındaki ilgi çekici noktalar, restoranlar ve indirim kuponları hakkında da bilgi verebiliyor.


 

Telefonunuzu nasıl bir iBeacon alıcısına veya vericisine dönüştürebilirsiniz?

iOS4’ten itibaren Core Location ile birlikte bir bölgeye girdiğimizi ve çıktığımızı CLRegion ve CLLocationManager sınıfları ile anlayabiliyorduk. Bölge (region) merkezi enlem ve boylam ile bu merkezden geçen metre ölçeğinde bir çap ile belirtilir. İzleyebileceğimiz bölge 20 ile sınırlı idi. iO7 ile gelen iBeacon teknolojisi bu eksikliği gidermek için karşımıza çıktı diyebiliriz.

iBeacon ile gelen yeni sınıflardan bahsedelim ve nasıl kullanıldığına bakalım.

CLBeacon

CLBeacon NSObject’i miras alır ve bölge izleme yapılırken beaconları temsil eder.

Bize sağladığı değerler

  • proximityUUID: Global tekil bir kimlik. Kendiniz bir tekil kimlik yaratmak istiyorsanız terminal üzerinden "uuidgen" komutunu yazmanız yeterli.
  • major and minor: Bu değerler de izlediğiniz veya oluşturduğunuz iBeaconlar üzerinde ayrıştırma imkanı sağlıyor. Örneğin Türkiye üzerindeki bir mağazanınız proximityUUID ile tanımlarsanız, major değeriniz bir ili ve minor değeriniz o ildeki şube kodunuzu temsil edebilir.
  • proximity: Beaconlara olan uzaklığınızı verir.
  • accuracy: Metre cinsinden doğruluğu verir. Bu değeri iki farklı beacona proximity değeriniz eşit ise hangisine daha yakın olduğunuz anlamak için kullanılabilir.
  • rssi: Desibel cinsinden ortalama olarak bir beacondan aldığınız sinyal seviyesini gösterir.

CLBeaconRegion

LBeaconRegion, CLRegion sınıfını miras alır ve bir bölge tanımlar. İlgili olduğunuz regionları tanımlamak veya cihazınızı bir iBeacon olarak ayarlamak için kullanılır.

Üç tane constructor’ı vardır:

  • initWithProximityUUID:identifier:

  • initWithProximityUUID:major:identifier:

  • initWithProximityUUID:major:minor:identifier:

 

Kendi cihazımızı bir iBeacon'a nasıl çeviririz?

1- Önce bir tane CLBeaconRegion oluşturun:

[cpp]NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@" FCBA1732-6C03-4A26-9A67-674470231CBF"];
NSString *identifier = @"com.turkcell.beacon";
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:1 minor:2 identifier:identifier];[/cpp]

2- Çevresel birim verisini CLBeaconRegion'dan alın:

[cpp]NSDictionary *peripheralData = [region peripheralDataWithMeasuredPower:nil];[/cpp]

3- CBPeripheralManager ile bir çevresel birim yöneticisi oluşturun:

[cpp]dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
CBPeripheralManager *peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:queue];[/cpp]

4- Çevresel biriminizi yayına başlatın:

[cpp][peripheralManager startAdvertising:peripheralData];[/cpp]

iBeacon testini yapabilmeniz için elinizde Bluetooth low energy 4.0 teknolojisine sahip olan test cihazınız olmayabilir. Diğer bir seçenek kullandığınız Mac cihazını iBeacon'a dönüştürmek. Bunun içi şuradan projeyi indirip Mac cihazınızı iBeacon’a çevirebilirsiniz: https://github.com/mttrb/BeaconOSX

 

Etrafımızdaki iBeacon’ları nasıl takip edebiliriz?

1- Bir tane CLBeaconRegion oluşturun:

[cpp]NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@" FCBA1732-6C03-4A26-9A67-674470231CBF"];
NSString *identifier = @"com.turkcell.beacon";
CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:1 minor:2 identifier:identifier]; 
region.notifyOnEntry = YES;
region.notifyOnExit = YES;
region.notifyEntryStateOnDisplay = YES;[/cpp]

2- Gelen sonuçları nasıl yakalayacağız?

iBeacon’ın sinyallerini almaya başladığınızda CLLocationManager instance’ına bir callback gelecektir. Bu durumda notification yollayarak uygulamanızın arayüzünde değişiklik yapabilirsiniz. Bu callbackleri alabilmek için CLLocationManagerDelegate protokolünü sınıfınıza eklemeniz gerekiyor.

[cpp]@interface AppDelegate () <CLLocationManagerDelegate>
@property (nonatomic,strong) CLLocationManager *locationManager;
@end[/cpp]

3- Bir tane CLLocationManager instance'ı oluşturun:

[cpp]locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;[/cpp]

4- İzlemeye başla:

[cpp][locationManager startMonitoringForRegion:region];[/cpp]

CLLocationManagerDelegate sınıfının delegate metodlarını implement ederek gelen sonuçları yorumlayabilirsiniz.

[cpp]

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
    NSLog(@"Beacon Found");
    [self.locationManager startRangingBeaconsInRegion:self.beaconRegion];
}

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
    NSLog(@"Left Region");
    [self.locationManager stopRangingBeaconsInRegion:self.beaconRegion];
    self.beaconFoundLabel.text = @"No";
}

-(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region {
    CLBeacon *beacon = [[CLBeacon alloc] init];
    beacon = [beacons lastObject];
    
    self.beaconFoundLabel.text = @"Yes";
    self.proximityUUIDLabel.text = beacon.proximityUUID.UUIDString;
    self.majorLabel.text = [NSString stringWithFormat:@"%@", beacon.major];
    self.minorLabel.text = [NSString stringWithFormat:@"%@", beacon.minor];
    self.accuracyLabel.text = [NSString stringWithFormat:@"%f", beacon.accuracy];
    if (beacon.proximity == CLProximityUnknown) {
        self.distanceLabel.text = @"Unknown Proximity";
    } else if (beacon.proximity == CLProximityImmediate) {
        self.distanceLabel.text = @"Immediate";
    } else if (beacon.proximity == CLProximityNear) {
        self.distanceLabel.text = @"Near";
    } else if (beacon.proximity == CLProximityFar) {
        self.distanceLabel.text = @"Far";
    }
    self.rssiLabel.text = [NSString stringWithFormat:@"%li", (long)beacon.rssi];
}

[/cpp]

Örnek olması açısından tamamlanmış bir projeyi şuradan edinebilirsiniz: https://dl.dropboxusercontent.com/u/26644626/iBeacons_Demo.zip

 

Açılış görseli: Estimote Press

Abdulbasıt Tanhan |

27.12.2013

Yorumlar

Caner Güral
07.01.2014 - 12:16

Bu teknolojiyi akşam fırına ya da markete gitmeyi her unuttuğumda hatırlıyorum. Belki işletmelerin iBeacon ya da Bluetooth LE kullanan ve benzer teknolojileri destekleyen cihazlara reklam göndermesi şeklinde değil de, "düşünceli esnafın müşteriye hatırlatmaları" şekllinde çok güzel kullanım alanı bulabilir. Sürekli günlük ihtiyaçlarımı karşıladığım bir yerin yakınından geçerken bana almam gerekenleri hatırlatabilecek çözümler olabilir. Üstelik bu sadece tek bir kullanım yeri. Eğitim kurumları, dediğiniz gibi turistik yerler... Hatırlatma, yön buldurma, yakınlığa bağlı uyarı gereken her yerde kullanılabilecek çok güzel bir teknolojiymiş.

Onur Sagaltici
14.06.2016 - 04:08
Kapali mekanlarda nesne takibi temali yüksek lisans tezim üzerinde calisiyorum. Büyük ihtimalle BLE beacon + Wi-Fi yapisini kullanacagim ve ne kadar erisim noktasi (AP) ve beacon gerekli oldugunu anlamaya calisiyorum. Alan 50mx50m ve duvar, kapi gibi engeller de mevcut. Bilgisi olan biri yardimci olabilirse cok sevinirim.
mustafa mert ergin
28.12.2014 - 07:13

region monitoring fails (The operation couldn’t be completed. kCLErrorDomain error 5.). arkadaşlar Xcode projemde böyle bir hata almaktayım internet ortamında bu hata ile ilgili birçok paylaşım olmasına rağmen çözüme ulaşamadım kimisi uygulamanın açılıp kapanınca düzeldiğini söylemekte ancak bende bu da işe yaramamakta sorun neden kaynaklanmakta.

Abdulbasıt Tanhan
30.09.2014 - 07:02
Guncelledim arkadaslar. Mevuct linki kullanabilirsiniz.
Batuhan Kabakcı
01.10.2014 - 11:53

Teşekkürler.

Batuhan Kabakcı
25.09.2014 - 10:44

Tamamlanmış proje linkinde sıkıntı var, tekrar güncelleyebilir misiniz?

Ali Işıngör
04.09.2014 - 03:02
Selim Bey, Yazıda adı geçen firmalarla iletişime geçmeyi denediniz mi?
Serkan Yürekli
01.09.2014 - 03:34
ya ben bir yada bir kaç adet iBeacon cihazına ulaşmam gerek.Nasıl ve nereden elde edebilirim?internet almak en son yol olarak düşünebilirsiniz öyle cevap verebilirsiniz.
Selim
01.09.2014 - 06:04
Bunu ben de merak ediyorum. Nereden satın alabiliriz? Pahalı şeyler mi?
Halil Keskin
01.09.2014 - 06:18

bu teknolojinin piyasa üzerinde farklı alternatifleri nelerdir?

Serkan Yürekli
04.09.2014 - 04:49

birde demo değilde tam sürüme nasıl ulaşabilirim? bu benim için önemli bir konu yardımcı olursanız sevinirim.

 

Tayfun DEMİRBAŞ
17.08.2014 - 07:13
Evet var.İnfonomi şirketi müzelere ve bazı büyük şirketlere Carrefour , Vakko vb gibi iBeacon ile işler yapıyor. IOS ve android platformu üzerinde.
Esra Altıntaş
21.08.2014 - 02:58
Bağlantı linkini güncelledik, teşekkürler.
Abdulbasıt Tanhan
12.08.2014 - 07:31

Burdan ulaşabilirsiniz.

Abdulbasıt Tanhan
12.08.2014 - 07:33
Linkten alabilirsin. https://dl.dropboxusercontent.com/u/26644626/iBeacons_Demo.zip
Abdulbasıt Tanhan
12.08.2014 - 07:33
Linkten alabilirsin. https://dl.dropboxusercontent.com/u/26644626/iBeacons_Demo.zip
Begüm Kırkgöz
15.07.2014 - 11:55

http://cdn5.devfright.com/wp-content/uploads/2013/09/iBeacons-Demo.zip Linki çalışmamakta. Güncelleyebilir misiniz?

Ahmet Hakkı
12.04.2014 - 07:07

Elimde bir adet estimote beacon var . Github dan Android SDK yı indirip Eclipse import ettim . Daha sonra gereken kütüphaneyi ekledim . Eclipse hiçbir hata almadım . Fakat daha sonra Galaxy S4 de çalıştırmak için Eclipste run ettiğimde , Galaxy S4 de " Estimote Demos Stopped Working " hatasını alıyorum . Yaptığım hatayı ve çözümünü öğrenebilir miyim .

Android SDK Linki :  https://github.com/Estimote/Android-SDK

Ali Işıngör
14.01.2014 - 10:46

Türkiye'de iBeacon ile yapılan işler var mı?

Ahmet
20.01.2014 - 05:52

İstanbul da düzenlenen Kodathon (http://kodathon.kodcu.com/tr/) da Akbil 2.0 adlı proje birinci olmuştu. IBeacon kullanarak akbil teknolojisine farklı bir deneyim katmışlardı. İnternette ayrıntılı bir bilgi göremedim ama şurada bir yazı var detaylar için bakılabilir: http://miratcan.tumblr.com/post/70917594897/kodathona-kim-neyle-geldi