先日投稿した、「【Cordova】アプリでiBeaconを扱うための「cordova-plugin-ibeacon」が動作しない【未解決】」という記事の、解決策が見つかりました…!
解決策というより、原因はコードに一部抜けがあったせいなんですけどね!
早速ですが、正常に動作したコードはこちら!
// 位置情報を取得
cordova.plugins.locationManager.requestWhenInUseAuthorization();
cordova.plugins.notification.local.registerPermission(function (granted) {
// console.log('Permission has been granted: ' + granted);
});
// delegateの作成と設定
var delegate = new cordova.plugins.locationManager.Delegate();
delegate.didDetermineStateForRegion = function(pluginResult) {
console.log('didDetermineStateForRegion', pluginResult);
}
delegate.didStartMonitoringForRegion = function(pluginResult) {
console.log('didDetermineStateForRegion', pluginResult);
}
// ビーコンを検知している間呼ばれる
delegate.didRangeBeaconsInRegion = function(pluginResult) {
document.getElementById("rangeDiv").value = JSON.stringify(pluginResult);
}
// ビーコンをキャッチ
delegate.didEnterRegion = function(pluginResult) {
}
// ビーコンの範囲外に移動
delegate.didExitRegion = function(pluginResult) {
}
// delegate の設定
cordova.plugins.locationManager.setDelegate(delegate);
// 監視するビーコンの設定
var uuid = '00000000-1d4e-1001-b000-001c4dbec041';
var identifier = 'ibeacon';
var major = 1;
var minor = 3;
var beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor);
beaconRegion.notifyEntryStateOnDisplay = true;
// 監視の開始
cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
.fail(function(e) { console.log(e); })
.done();
cordova.plugins.locationManager.startMonitoringForRegion(beaconRegion)
.fail(function(e) { console.log(e); })
.done();
変更点は、49行目の下記の記述を追加した点です。
cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
.fail(function(e) { console.log(e); })
.done();
様々なサンプルコードを見比べたところ、ここの記述が不足していました。
で、コードを追加したところ、問題なくビーコンの信号を取得できました!
というわけで、ただの私のポカミスだったわけです。
…凡ミスで恥ずかしい限りです。
今後は気を付けなければいけませんね。
ということで、以上、iBeaconを扱うための「cordova-plugin-ibeacon」が動作しない時の対処法でした。
可能であれば、きちんと動作するサンプルコードを改変してアプリ開発を行った方が安全かもしれません。