Turkcell | Geleceği Yazanlar

GELECEĞİ YAZANLAR BLOG

Yeni Blog Yaz

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

Abdulbasıt Tanhan - 27 Aralık 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

21 Cevap

Caner Güral

07 Ocak 2014

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ş.

Ali Işıngör

14 Ocak 2014

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

Tayfun DEMİRBAŞ

17 Ağustos 2014

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.

Ahmet

20 Ocak 2014

İ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

Ahmet Hakkı

12 Nisan 2014

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

Sayfalar

Yorum yapmak için Giriş Yapın ya da Üye olun.