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...
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
27.12.2013
Yorumlar
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.
Teşekkürler.
Tamamlanmış proje linkinde sıkıntı var, tekrar güncelleyebilir misiniz?
bu teknolojinin piyasa üzerinde farklı alternatifleri nelerdir?
birde demo değilde tam sürüme nasıl ulaşabilirim? bu benim için önemli bir konu yardımcı olursanız sevinirim.
Burdan ulaşabilirsiniz.
http://cdn5.devfright.com/wp-content/uploads/2013/09/iBeacons-Demo.zip Linki çalışmamakta. Güncelleyebilir misiniz?
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
Türkiye'de iBeacon ile yapılan işler var mı?
İ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
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ş.