SlideShare a Scribd company logo
iBeaconを身近に! 
アプリ開発の基礎とポイント 
2014.11.25 
Communication Planning 
Tominaga Ayaka
iBeacon 
体験したことありますか?
iBeaconDemo 
距離によって画像が変わります 
各種設定がポイント! 
1. BluetoothをON 
2. 位置情報をON 
iOS7の場合は、 
3. バックグラウンド更新をON
iBeaconのコード
“Core Location Framework” 
を使用します!
Core Location Framework 
位置情報関連の機能が詰まったフレームワークです 
CLBeacon 
CLFloor 
CLLocation 
CLLocationManager 
CLRegion 
CLBeaconRegion 
etc.
Core Location Framework 
iBeaconに使用するのは。。。 
CLLocationManager 
CLBeaconRegion 
CLBeacon 
! 
この3つだけなのです!
構成 
iPhone 
ビーコン 
リージョン
モニタリングとレンジング
モニタリングとレンジング 
モニタリングとは。。。 
ビーコンで形成されるリージョンへの端末の 
出入りを監視します 
レンジングとは。。。 
ビーコンと端末の距離を監視します
モニタリングを開始する 
1. 監視対象のリージョンを設定します 
リージョンの各値は、リージョンを形成しているビーコンの値によっ 
て決まります! 
UUID 
Major 
Minor 
identifier
モニタリングを開始する 
<今回使用するビーコンの設定値> 
UUID: 
421AAA52-28CD-4CA0-88CA-A936F4C65BF8 
! 
Major: 10 
Minor: 10 
ビーコン 
リージョン
モニタリングを開始する 
1. 監視対象のリージョンを設定します 
使用するビーコンから以下のように設定します。 
UUID: 
421AAA52-28CD-4CA0-88CA-A936F4C65BF8 
Major:10 
Minor:10 
identifier:region_1
モニタリングを開始する 
2. リージョン設定をコードで書く 
!! 
NSUUID *proximityUUID = [[NSUUID alloc] 
initWithUUIDString:@"421AAA52-28CD-4CA0-88CA-A936F4C65BF8"]; 
CLBeaconMajorValue major = 10; 
CLBeaconMinorValue minor = 10; 
NSString *identifier = @"region_1"; 
!!! 
CLBeaconRegion *beaconRegion 
= [[CLBeaconRegion alloc] initWithProximityUUID:proximityUUID 
major:major 
minor:minor 
identifier:identifier];
モニタリングを開始する 
3. 実際にモニタリングをしてみる! 
!! 
CLLocationManager *locationManager; 
! 
locationManager = [[CLLocationManager alloc] init]; 
locationManager.delegate = self; 
[locationManager startMonitoringForRegion:beaconRegion]; 
!! 
これだけでモニタリングが開始されます! 
! 
次は、モニタリングの結果を受け取れるように 
CLLocationManagerDelegateを実装します。
CLLocationManagerDelegate 
モニタリングに関連するDelegate 
!!! 
リージョンに入った時に呼ばれる 
- (void)locationManager:(CLLocationManager *)manager 
didEnterRegion:(CLRegion *)region 
!! 
リージョンから出た時に呼ばれる 
- (void)locationManager:(CLLocationManager *)manager 
didExitRegion:(CLRegion *)region
Demoだと。。。 
//リージョンに入った時に呼ばれる 
- (void)locationManager:(CLLocationManager *)manager 
didEnterRegion:(CLRegion *)region { 
[locationManager 
startRangingBeaconsInRegion:(CLBeaconRegion *)region]; 
[self setLocalNotification:@"リージョンに入りました"]; 
} 
! 
//リージョンから出た時に呼ばれる 
- (void)locationManager:(CLLocationManager *)manager 
didExitRegion:(CLRegion *)region { 
[locationManager 
stopRangingBeaconsInRegion:(CLBeaconRegion *)region]; 
_imageView.image = nil; 
[self setLocalNotification:@"リージョンから出ました"]; 
}
レンジングを開始する 
レンジングを始めるコードは。。。これだけ! 
! 
[locationManager 
startRangingBeaconsInRegion:(CLBeaconRegion *)region]; 
!!!! 
モニタリングと同様にレンジングの結果を受け取れるように 
CLLocationManagerDelegateを実装します。
CLLocationManagerDelegate 
レンジングに関連するDelegate 
! 
//レンジング開始後、1秒間隔で呼ばれる 
- (void)locationManager:(CLLocationManager *)manager 
didRangeBeacons:(NSArray *)beacons 
inRegion:(CLBeaconRegion *)region
Demoだと。。。 
//レンジング開始後、1秒間隔で呼ばれる 
- (void)locationManager:(CLLocationManager *)manager 
didRangeBeacons:(NSArray *)beacons 
inRegion:(CLBeaconRegion *)region { 
if (beacons.count > 0) { 
BOOL showImage = false; 
for (int i=0; i<beacons.count; i++) { 
CLBeacon *beacon = beacons[i]; 
switch (beacon.proximity) { 
case CLProximityImmediate: 
_imageView.image = [UIImage imageNamed:@"Immediate"]; 
showImage = YES; 
break; 
case CLProximityNear: 
_imageView.image = [UIImage imageNamed:@"Near"]; 
showImage = YES; 
break; 
case CLProximityFar: 
_imageView.image = [UIImage imageNamed:@"Far"]; 
showImage = YES; 
break; 
case CLProximityUnknown: 
default: 
break; 
} 
if (showImage) { 
break; 
} else { 
_imageView.image = nil; 
} 
} 
} 
}
Demoだと。。。 
for (int i=0; i<beacons.count; i++) { 
CLBeacon *beacon = beacons[i]; 
! 
switch (beacon.proximity) { 
case CLProximityImmediate: 
_imageView.image = [UIImage imageNamed:@"Immediate"]; 
break; 
case CLProximityNear: 
_imageView.image = [UIImage imageNamed:@“Near"]; 
break; 
case CLProximityFar: 
_imageView.image = [UIImage imageNamed:@"Far"]; 
break; 
case CLProximityUnknown: 
default: 
break; 
} 
}
CLProximityとは?
CLProximity 
端末とビーコンの距離を表します! 
CLProximityImmediate:とても近い 
CLProximityNear:近い 
CLProximityFar:遠い 
CLProximityUnknown:わからない
CLProximity 
端末が受信する電波の強度によって設定されて 
いるようです。 
! 
例えば、 
間に障害物を挟むと簡単に値を変えることがで 
きます。
というわけで、 
Demoはこんな感じで 
作られています♪
CLLocationManagerDelegate 
CLLocationManagerDelegateには他にも以下のような 
ものがあります。 
locationManager:didStartMonitoringForRegion: 
モニタリングが開始された際に呼ばれる 
locationManager:didDetermineState:forRegion: 
端末とリージョンの位置関係知るため 
  requestStateForRegion:をコールした際に呼ばれる 
locationManager:monitoringDidFailForRegion:withError: 
モニタリングでエラーが発生した際に呼ばれる
CLLocationManagerDelegate 
CLLocationManagerDelegateには他にも以下 
のようなものがあります。 
locationManager:rangingBeaconsDidFailForRegio 
n:withError: 
レンジングでエラーが発生した際に呼ばれる 
locationManager:didChangeAuthorizationStatus: 
位置情報に関する設定が変更された際に呼ばれる
iBeaconアプリを作る際には 
1. サンプルアプリを見つけて 
2. だいたいの流れを把握し 
3. 公式リファレンスを読みつつ作り込む! 
https://developer.apple.com/library/ios/documentation/CoreLocation/ 
Reference/CoreLocation_Framework/index.html 
という流れがオススメです!
そうは言っても 
ビーコン持ってないしなぁ。。。
そんなあなたのために 
MacやiPhoneをビーコンにするアプリ 
をプレゼント! 
当日の配布資料をご確認ください!
ありがとうございました!

More Related Content

Similar to 【ヒカ☆ラボ】あなたのMacがあっという間にBeacon端末に変身!~2015年必ずクル「iBeacon」を1から10まで~

JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
アシアル株式会社
 
Kubernetes 導入から始める DevOps について
Kubernetes 導入から始める DevOps についてKubernetes 導入から始める DevOps について
Kubernetes 導入から始める DevOps について
Shigeru Tatsuta
 
5.総合演習(2)
5.総合演習(2)5.総合演習(2)
5.総合演習(2)
openrtm
 
Driverについて
DriverについてDriverについて
Driverについて
幸雄 村上
 
ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現
Shigeru Tatsuta
 
Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-
IBMソリューション
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
Yusuke Tochigi
 
20180527 ORB SLAM Code Reading
20180527 ORB SLAM Code Reading20180527 ORB SLAM Code Reading
20180527 ORB SLAM Code Reading
Takuya Minagawa
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
yoshikawa_t
 
Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
Tomoyuki Obi
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
Yukihiko SAWANOBORI
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternAtsushi Kambara
 
SHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたSHARPのエコ技を実装してみた
SHARPのエコ技を実装してみた
android sola
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeNA
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
Ryusaburo Tanaka
 
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
Akira Hatsune
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
Hiroaki_UKAJI
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
Masahito Zembutsu
 

Similar to 【ヒカ☆ラボ】あなたのMacがあっという間にBeacon端末に変身!~2015年必ずクル「iBeacon」を1から10まで~ (20)

JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
JINS MEME DEVELOPER HANDS-ON (Monaca / Apache Cordova編)
 
Kubernetes 導入から始める DevOps について
Kubernetes 導入から始める DevOps についてKubernetes 導入から始める DevOps について
Kubernetes 導入から始める DevOps について
 
Morioka As0x02
Morioka As0x02Morioka As0x02
Morioka As0x02
 
5.総合演習(2)
5.総合演習(2)5.総合演習(2)
5.総合演習(2)
 
Driverについて
DriverについてDriverについて
Driverについて
 
ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現ソフトバンクにおける Java による クラウドネイティブの実現
ソフトバンクにおける Java による クラウドネイティブの実現
 
Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-Bluemixの基本を知る -仕組みと使い方-
Bluemixの基本を知る -仕組みと使い方-
 
LabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training SlideLabVIEW NXG Web Module Training Slide
LabVIEW NXG Web Module Training Slide
 
20180527 ORB SLAM Code Reading
20180527 ORB SLAM Code Reading20180527 ORB SLAM Code Reading
20180527 ORB SLAM Code Reading
 
Chrome DevTools.next
Chrome DevTools.nextChrome DevTools.next
Chrome DevTools.next
 
Clrh 20140906 lt
Clrh 20140906 ltClrh 20140906 lt
Clrh 20140906 lt
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
Application Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD PatternApplication Architecture for Enterprise Win Store Apps with DDD Pattern
Application Architecture for Enterprise Win Store Apps with DDD Pattern
 
SHARPのエコ技を実装してみた
SHARPのエコ技を実装してみたSHARPのエコ技を実装してみた
SHARPのエコ技を実装してみた
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
JavaFX + NetBeans環境におけるJenkinsの活用(Jenkins第六回勉強会)
 
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06Kinect Camp with TMCN/ Kinect入門ハンズオン 2015.06.06
Kinect Camp with TMCN / Kinect入門ハンズオン 2015.06.06
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 

【ヒカ☆ラボ】あなたのMacがあっという間にBeacon端末に変身!~2015年必ずクル「iBeacon」を1から10まで~