今回は、「cordova-plugin-ibeacon」という、CordovaアプリでiBeaconを取り扱うためのプラグインについてです。
Android端末では思い通りに動作したのですが、何故かiOSでは、ビーコンの信号をキャッチできず…。
色々サイトを見て、設定等を変更しているのですが、残念ながら、まだ未解決です。
使用したプラグインはこちらから確認できます。
GitHub – petermetz/cordova-plugin-ibeacon: An iBeacon plugin for Phonegap / Cordova 3.x and upwards. Supports both iOS and Android (contributions are welcome)
https://github.com/petermetz/cordova-plugin-ibeacon
で、実際に記述したコードはこちら。
var uuid = '[使用するビーコンのUUIDを指定]';
var identifier = 'ibeacon';
var major = 0;
var minor = 0;
var beaconRegion = null;
// 監視するビーコンの設定
beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor);
// delegateの作成と設定
var delegate = new cordova.plugins.locationManager.Delegate();
delegate.didStartMonitoringForRegion = function(pluginResult) {
// ビーコンの観測の開始に成功
};
delegate.didDetermineStateForRegion = function(pluginResult) {
// 領域への入退場のステータス変化を検知
};
delegate.didEnterRegion = function(pluginResult) {
// ビーコンをキャッチした時に呼ばれる
cordova.plugins.notification.local.schedule({
title: "iBeacon",
text: "didEnterRegion",
foreground: true
});
};
delegate.didRangeBeaconsInRegion = function(pluginResult) {
// ビーコンを検知している間呼ばれる
};
// delegate の設定
cordova.plugins.locationManager.setDelegate(delegate);
// パーミッションチェック
cordova.plugins.locationManager.requestAlwaysAuthorization();
cordova.plugins.notification.local.requestPermission();
cordova.plugins.backgroundMode.enable();
// 監視の開始
cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion)
.fail(function(e) { })
.done();
}
19行目で、ビーコンが発信している信号をキャッチしたら、通知を飛ばす、という処理を行いたかったのですが、これが動作せず…。
もしや、通知の設定が間違っているのか?と思い、別の箇所で動作確認をしたところ、問題なく動作したので、通知の問題ではなさそう。
また、11行目や15行目の関数内でも、試しに通知の処理を記述して見ましたが、こちらでも問題なく通知がされたので、プラグインにも問題はないようです。
ただ、15行目のビーコンの通知領域への入退場ステータス変化を検知した時に実行される関数では、引数 pluginResult.state が「CLRegionStateOutside(通知範囲から退場)」しか取れていないようだったのが気にかかっています。
どうやら範囲内に入った検知が行えていないようで…でも、その対処法がわからず、悩み続けております。
GitHubに、おそらく同じことでお悩みの方の投稿があったので見てはいるのですが、それでも解決できず。
ちなみに投稿はこちら。
IOS Plugin not working…・Issue #167・petermetz/cordova-plugin-ibeacon・Github
https://github.com/petermetz/cordova-plugin-ibeacon/issues/167
こちらの投稿では、locationManager のパーミッションのリクエストをしているかや、XCodeでの設定についての確認があり、それらに対応したのですが、それでも動かず…。
…根が深そうな気がしますね。
一度、プラットフォームの削除と再インストールを試してみようかな?
なお、サンプルコードはきちんと動作したので、私のコードもしくは設定が間違っているのは間違いなさそう。
原因がわかったら、また改めてご紹介したいと思います!
それまでしばしお待ちを!