ビーコンも届いたので、前に利用登録したBeaconBridgeのSDKを利用して、iOSアプリを作ってみました。
備忘録を兼ねて、少し実装についてまとめてみました。
なお、この記事をベースに実装したものはGitHubで公開しています。
https://github.com/mugicha755/BeaconBridge-Sample
BeaconBridgeのユーザ登録と概要はこちら
BeaconBridgeにユーザ登録してリファレンスアプリを使ってみた(iOS)
アプリケーション概要
概要
自席にビーコンを置いて、在席と離席をロギングする。
ひとまずビーコンアプリとしては動作確認しやすい簡単なもので。
ちゃんと作れば出退勤の管理ができるはず。
実装
管理画面
1. サービス追加
2. ビーコン登録
UUIDは下記Webサイトで生成。
http://www.itu.int/en/ITU-T/asn1/Pages/UUID/uuids.aspx
手順からは省略しましたが、ビーコン情報の設定はGimbalビーコンにもしました。
3. アクション登録
key に [data_type3] と設定しておくと、SDKがiOS用の定義として認識するらしい。
4. ルール登録
登録したビーコンの「Enter」と「Exit」を検知した時の動作を登録。
「Enter」で自席にいる、「Exit」で自席から離れたと判断するイメージです。
登録したビーコンとアクションをそれぞれ「Enter」イベントと紐づける。
スクリーンショットは用意してませんが、「Exit」も同様に。
5. APIキー発行
「+」ボタンをクリックし、ラベルを設定すると該当サービスのAPIキーが発行される。
このAPIキーをSDKに渡すことで、SDKとユーザページで作成したビーコン検出のルールが紐付けられる。
アプリケーション実装
1. imhereSDK.frameworkインポート
imhereSDK.frameworkをプロジェクトにドラッグ&ドロップ
imhereSDK.frameworkはユーザページからDLしました。
BeaconBridgeなのに、imhereなのが凄く違和感がありますが、どうやら開発コードらしいです。
2. iOS SDKのframeworkインポート
下記3つをインポート
・CoreLocation.framework
・CoreBluetooth.framework
・SystemConfigration.framework
3. plist更新
iOS8よりCoreLocation(iBeacon)で近接監視するために必要になった認証情報をinfo.plistに追記。
Key
NSLocationAlwaysUsageDescription
Type
String
Value
任意の文字列
ソースコード表示にして直接編集しても可。
<key>NSLocationAlwaysUsageDescription</key>
<string>任意の文字列</string>
4. 実装
最低限次の3点を実装することで動作する。
・4-1. SDK初期化 & 検出ルール更新
・4-2. ビーコン検出開始
・4-3. delegateの実装
4-1. SDK初期化 & 検出ルール更新
#import<imhereSDK/imhereSDK.h>
#import<imhereSDK/imhereDefine.h>
#import<imhereSDK/sdkResult.h>
#define URL {BeaconBridge trial URL}
#define API_KEY {Your API_KEY}
@interface sdkMng()<imhereSDKDelegate>
{
imhereSDK *_sdk;
}
~ 省略 ~
-(void)setSDK{
// 初期化 push通知は利用しないのでnilを設定
_sdk = [[imhereSDK alloc] init];
_sdk.delegate = self;
[_sdk initialize:[NSURL URLWithString:URL]
apiKey:API_KEY
pushToken:nil];
// ルール同期
[_sdk syncRules];
}
4-2. ビーコン検出開始
-(void)startMonitor{
[_sdk startMonitor];
}
4-3. delegateの実装
#pragma -mark sdk delegate method
// ビーコン検出時のアクションの実行可否
-(id)notifyPreBeaconAction:(NSDictionary *)pAction{
// 実行を通知
return KEY_ACTION_EXECUTION;
}
//ビーコン検出時のアクション情報
-(void)notifyBeaconAction:(sdkResult *)pPostResult
withActionList:(NSArray *)pActList{
//アクション検出でロギング
}
//サーバ側に通知する付加情報の設定
-(NSDictionary *)confirmExtraData:(NSDictionary *)pEvents
{
// 特に追加する情報なしのため、そのまま通知
return pEvents;
}
作ったアプリケーションの画面
とりあえず、動作確認ができる程度のアプリです。
勤怠管理までするなら画面やデータの永続化含めていろいろと検討が必要...
まとめ
・SDKで提供されているため、自分で一から実装するよりかなり楽(特にサーバとの連携あたり)
・今回作ったものはクライアントアプリで閉じた実装なので、もう少し色々なことも試してみようと思う