わふうの人が書いてます。

iOSアプリケーション開発、BLEのファームウェアとハードウェア試作のフリーランスエンジニア。

iOS8でのiBeacon活用

WWDC2014のプレゼンテーションから、iOS8での/iOS8からのiBeaconの活用方法をまとめてみます。

すでに iOS8で正体を現したAppleの屋内位置測位。iBeaconは第一形態だった。Maps Connectとは? #WWDC14 で詳細に記述されていますが、重複しつつも改めてまとめてみます。

資料

開発者向け情報:

iBeaconの開発者および敷設と管理者向けの一般情報:

iBeaconの設置および建物の所有者向け:

  • https://mapsconnect.apple.com 屋内地図の登録申請が始まっています。Apple IDでログインできます。所有する建物や図面フォーマットなど屋内マップに必要な情報が項目にあります。

建物の所有者向けの情報、iOS8に向けた準備

建物所有者がiOS8に向けてできることは:

  1. WiFiやiBeaconを含めた屋内地図の登録申し込みを始める,
  2. iBeaconの設置計画をたてる,
  3. 屋内ナビゲーションアプリをリリースするならばアプリケーション開発を始める,

です。

WWDC2014では、iOS8の屋内測位についての明確な技術情報は提供されてはいません。プレゼンテーションでは、位置情報を提供するフレームワークが、CLFloorクラスという建物の階をアプリケーションに伝える機能が追加された、屋内ナビゲーションアプリを作成するときに緯度経度と地図画像の座標変換を楽にするヘルパー関数が提供される、発表があった程度です。

Appleの地図アプリへのデータ提供

https://mapsconnect.apple.com では屋内地図の登録申請が始まっています。このサイトには、開発者でなくとも一般的なApple IDでログインできます。所有する建物の住所および提出できる図面フォーマットや屋内測位に使えるWiFiやiBeaconを設置しているかなどの、屋内マップ作成に必要な情報が項目にあります。

これはAppleの地図アプリケーションに屋内マップ表示を取り込むためのものだと思われます。特に駅や空港などの公共機関は、地図データの登録のやりとりを早く開始すべきでしょう。

屋内地図を使う場面には、ユーザの現在位置表示が必要です。GPSが届かない屋内での位置推定は、カーナビゲーションと同じように加速度センサなどを活用した慣性航法を提供するかもしれません。ですがこの方法は誤差が積分されていきます。その補正にWiFiやiBeaconの屋内の電波状態を使うと思われます。

WiFiは通信環境を構築するために設置しますから、特に屋内ナビゲーションのために何かをすることはないでしょう。ただし、iBeaconはWiFiよりも電波が届く範囲を小さく設定するなど自由度が高いですから、ユーザが必ず通過しかつ移動範囲が限定される入り口などにより集中して設置することで、初期位置の補正に有効に使えます。

建物へのiBeaconのビーコン設置は、電池ではメンテナンスが手間でしょうから、電源配線が必要になるでしょう。またビーコンの設置そして動作していることをモニタリングする仕組みも必要になります。

屋内案内のアプリケーション開発

例えば百貨店などでは、屋内位置がわかるだけでは不十分で目的のお店の位置表示およびナビゲーションが必要になります。配置が頻繁に変更されるテナントの詳細情報までは、Appleへの屋内地図データ提供では対応しきれないでしょう。このような場合は、専用のナビゲーションアプリケーションの開発があります。

iOS8は、アプリ屋内案内のアプリケーション開発を手助けする屋内案内地図表示のヘルパ関数を提供しています。しかし、アプリケーションが開発できても、問題はユーザがそのアプリケーションをどうやってインストールしてくれるかです。

iOS8は位置に紐付いたアプリケーションのインストールに:

  • AppStoreのnear-me,
  • ロック画面のアプリまたはAppStoreアイコンの表示,

を提供します。

AppStoreのnear-meは、AppStoreアプリのタブ”近くで人気”のことです。その場所で人気のアプリケーションを表示するので、例えば先ほどの百貨店のアプリケーションは店舗の近くでアプリケーションが表示されます。アプリケーションと位置の対応付けを、アプリケーション提供者が設定できるかなどの仕組みは、不明です。

iOS8からは、ロック画面にその位置に関連するアプリケーションのアイコンまたはAppStoreのアイコンが表示されるそうです。これも、どのように関連付けされるのか、また設定ができるのかはわかりませんが、わざわざユーザがAppStoreを開く手間を省くことを提供すると思われます。

この新しい屋内位置案内は米国内で順次提供が開始されるそうです。近々には

  • California Academy of Sciences, San Francisco
  • Westfield San Francisco Centre, San Francisco
  • Mineta San Jose International Airport, San Jose

だそうです。

開発者向けの情報

iOS7で開発したアプリケーションはiOS8で動作するか

動作するはずです。

iBeaconに関係するCoreLocationのAPI自体は変更はありません。ただしiOS8では位置情報のユーザ認可(authorization)が変更されています。ストアのiOS7対応のアプリケーションをiOS8のデバイスにインストールした場合は、のちに述べるAlways authorization で実行されます。

iOS8でのiBeaconアプリ開発

iBeaconに関わるCoreLocationのAPIは、iOS7とiOS8で変更はありません。

ただし、iOS8では位置情報のユーザ認可(authorization)が変更されています。iOS7までの位置情報のユーザ認可は1つだけでしたが、これがiOS8では、アプリ実行時およびバックグラウンドで常に位置情報を取得できる Always authorization と、アプリが実行状態の間だけ位置情報を取得できるWhenInUse authorization の2つに分離されます。

位置情報の利用認可ダイアログに表示するテキストを指定する Info.plist のキーおよびauthorizationの要求のAPIはiOS8で廃止されます。iOS8では、Always authorization および WhenInUse authorization それぞれに対して、ダイアログに表示するテキストを指定する Info.plist のキー値およびCoreLocationのAPIが追加されています。

Always authorization と WhenInUse authorization

WhenInUse authorization は、Continuous Updatesを受け取れます。アプリケーションが表示されている間に、CLLocationの位置情報取得を実行できます。

Continuous Updatesは、Location , Background , Location Ranging の3つです。WhenInUse authorizationでも、バックグラウンド状態での位置更新情報が受け取れることに注意します。WhenInUse authorizationはアプリケーションがフォアグラウンドの間しか位置情報取得の開始/停止はできませんが、バックグラウンドでの位置情報の取得はできます。

Always authoriazationは、Continuous Updatesに加えて、Location Monitoringもできます。Location Monitoringは、Region monitoring、Significant location changesの2つです。

いずれのauthorizationでも、アプリケーションが最初に位置情報を要求した時に、ユーザに位置情報利用認可ダイアログを表示します。Always authoriazationのときのみ、数日後にこのダイアログが再度表示されます。プライバシーに配慮して再度確認するようです。

iBeaconを使うアプリケーションは、レンジング(ranging)および領域監視(region monitoring)を使うでしょう。もしもアプリケーションが表示されている間だけiBeaconを検出するならば、WhenInUse authoriazationでよいでしょう(未確認)。領域監視も使うならば Always authorizationが必要です。

iOS7向けに開発されたアプリケーションがiOS8なiOSデバイスにインストールされた場合は、Always authorization とみなされますから、領域監視をするアプリケーションでもそのまま動作するはずです。

その他WWDC2014ののセッションメモ

その他、What’s New in Core Location, Session 706 での要点メモです。

新しくはいった機能は3つ。

  • Location authorization
  • Visit monitoring
  • Indoor positioning

Location authorizationは上記で述べたので省略。

UILocalNotification が位置をトリガーにすることができます。

1
2
region-based triggering。
@property(nonatomic,retain) CLRegion *region;

MKMapViewに、現在のユーザ位置を表示するかの設定が入ります。

1
2
MKMapView
@property (nonatomic) BOOL showsUserLocation;

Web viewsに、To allow web content that uses HTML5 geolocation

また訪れた場所を24時間/7日モニタリングしつづけられるVisit monitoringが新しく加わります。ユーザがある場所に到着/出発したタイミングで、到着時間/出発時間また位置と位置精度が通知されます。

1
2
3
4
5
6
7
8
9
10
11
12
@interface CLLocationManager (CLVisitExtensions)
- (void)startMonitoringVisits;
- (void)stopMonitoringVisits;
@end

CLVisit
@interface CLVisit : NSObject <NSSecureCoding, NSCopying>
@property (nonatomic, readonly, copy) NSDate *arrivalDate;
@property (nonatomic, readonly, copy) NSDate *departureDate;
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
@property (nonatomic, readonly) CLLocationAccuracy horizontalAccuracy;
@end

Taking Core Location Indoors,Session 708 の要点メモ。

Wi-Fi on, device unlockek すれば 建物の階がわかる。

ヘルパー関数は:

  • MKMapPointForCoordinate
  • MKMetersBetweenMapPoints
  • MKMetersPerMapPointAtLatitude
  • CGAffineTransformMakeScale
  • CGAffineTransformMakeRotation
  • CGPointApplyAffineTransform

雑感

Visit monitoringなんて、何に使うのでしょうね。