SwiftでiBeacon(観測)を実装する

2014年11月30日

ios

 

 

SwiftでBeacon観測の実装をしてみた。

 

Beacon自体(発信側)は「XBeaconを利用させて頂いた。

※本記事の最後に追記あり 2015/7/30

 

実装したアプリの大まかな動作は以下となる。

 

Beacon領域に入った時に「入りました」とローカル通知がされ、領域から出た時に「出ました」と通知がされる。

 

基礎的なポイントとしては、iOS8において位置情報の認証が変更されたこと、そしてローカル通知もユーザへの通知確認が必要となったことが挙げられる。

 

 

■開発環境


 

Mac OS X 10.9.5
Xcode version 6.1
iPhone5S(iOS 8.1)

 

※ 今回の記事はiOS8のみの対応をしている。

 

 

※2015/7/30 追記

下記バージョンに関して、本記事の最後に追記あり。

Mac OS X 10.10.3
Xcode version 6.4
iPhone5S(iOS 8.4)

 

 

■以下手順


 

「Single View Application」でプロジェクトを作成し、CoreLocation frameworkを追加する。

 

位置情報サービスの認証について

iOS8から位置情報取得の権限が以下の3つになった。

 

・「許可しない」
・「常に許可する」→バックグラウンドで実行中の場合にもアプリが位置情報を利用することを許可する
・「使用中のみ許可」→アプリまたはその機能が画面上に表示されている場合のみ位置情報を利用することを許可

 

今回は「常に許可」「許可しない」だけを利用するので、
Info.plist に「NSLocationAlwaysUsageDescription」を追加する。

※「使用中のみ許可(WhenInUse)」を利用するならば
NSLocationWhenInUseUsageDescriptionも追加する。

 

Info.plist

Info-plist

 

実機にインストールした際の設定画面

beacon

 

 

■コードと説明 


 

 

ViewController.swift

 

2行目 import CoreLocation を追加する

4行目 CLLocationManagerDelegateプロトコル を追加する

 

7〜13行目 ストーリーボードで設定

beacon2 実機で試したキャプチャー →beacon3

 

38行目

UUIDは
Macのターミナル上でuuidgenと打ち込めば自動で生成されるので、それをコピペして貼っておく。もちろんこの文字列は「XBeacon」側にも同じ値を設定しておくこと。

 

32〜35行目

位置情報取得の認証ダイアログ表示

requestAlwaysAuthorizationはiOS8 SDKで新しく追加されたAPIだ。

 

 

大雑把な流れ

観測を開始(startMonitoringForRegion)して

開始に成功すると(didStartMonitoringForRegion)が呼ばれる。

→開始に失敗すると(monitoringDidFailForRegion)。

 

観測開始に成功したら、領域内にいるかどうかの判定(requestStateForRegion)をおこなう。(didDetermineState)デリゲートが呼ばれる。

 

・すでに領域内にいる場合
(startRangingBeaconsInRegion)で測定(didRangeBeacons)がはじまる。

 

・まだ領域内にいない場合
領域に入ったら(didEnterRegion)が呼ばれ、

(startRangingBeaconsInRegion)で測定(didRangeBeacons)がはじまる。

領域から出たら(didExitRegion)が呼ばれ、
測定をストップする(stopRangingBeaconsInRegion)。

 

 

ローカル通知

iOS8からはローカル通知もユーザからの許可が必要となる。

 

AppDelegate.swift

 

上記のコード及び、ViewController.swiftに以下を記述(196〜201行目)。

 

 

以上

 

 参照ページ


 

004 iBeaconの検出 – Swift Docs

SwiftとiBeaconを使ってお母さんが自分の部屋に近づいて来た事を警告するアプリをつくる

 

 

 

※2015/7/30 追記


 

上記のSwiftコードは、下記バージョンにおいてエラーが発生するが、

 

Mac OS X 10.10.3(Yosemite)
Xcode version 6.4
iPhone5S(iOS 8.4)

 

004 iBeaconの検出 – Swift Docs

では常にコードを更新してくれているらしいので、エラー部分を訂正すれば大丈夫(他人任せ)。

 

またBeaconをアドバタイズさせるアプリ「XBeacon」はYosemiteでは使えないので、

node-bleacon」を利用させて頂いた。

 

npm install bleacon

でインストールしたら、下記コードを作成する。

 

test.js

 

node test.js

でアドバタイズ完了。

 

参照

Mac OSX Yosemite(10.10.2)をBeacon化する方法

[iOS][OS X] Yosemite で Beacon アプリを動作させる

Copyright © 2019 アクト・オブ・リーディング All Rights Reserved.  プライバシーポリシー