我目前正在研究混合应用程序(Ionic),并且在iOS上检测iBeacons时遇到问题(目前正在开发9.2)。我正在使用cordova-plugin-estimote(https://github.com/evothings/phonegap-estimotebeacons)来检测信标,遵循他们的文档,一切在Android上运行正常,但在iOS上运行不正常。简直没有检测到信标。没有错误,它没有找到任何东西。
有趣的事实:当我在iPhone上下载原始的estimote应用程序时,它在我登录之前也没有检测到任何iBeacons。之后,它开始正常检测它们。为什么会这样?
基于插件文档的AngularJS代码的相关部分:
$scope.init = function() {
bluetoothSerial.isEnabled(scanBeacons, errorBluetooth);
}
function scanBeacons() {
startScanning();
updateList = $interval(updateView, 5000);
}
function startScanning() {
console.log("requesting permissions");
estimote.beacons.requestAlwaysAuthorization(successAuth, errorAuth);
}
function successAuth(){
console.log("success auth, starting scan");
estimote.beacons.startRangingBeaconsInRegion(
{},
onMonitoringSuccess,
onError);
}
function errorAuth(){
console.log("error auth");
popupService.showPopup("Authorization error", "Location services required to perform scanning");
}
function onMonitoringSuccess(regionState) {
console.log("monitoring success: "+JSON.stringify(regionState));
var successHandler = function (response) {
$scope.downloadedlist = response;
$scope.offline = false;
};
var errorHandler = function (response) {
$scope.beaconList = regionState.beacons;
};
eventService.getBeaconList(regionState.beacons, storageService.getEventId())
.then(successHandler)
.catch(errorHandler);
}
function onError(response) {
console.log("monitoring error: "+JSON.stringify(response));
popupService.showPopup('popup.error.title', 'popup.error.server');
}
正如您所看到的,我有一些console.log语句(必须以这种方式完成)并且我正在“请求权限”,紧接着是“成功验证,开始扫描”。这很奇怪,因为显示了授权弹出窗口,但代码不等待用户输入,它只是自动触发成功处理程序(successAuth)函数,就是这样。没有更多的日志,这意味着没有监控成功,没有错误,它只是没有找到任何信标。
任何帮助表示赞赏。感谢。
答案 0 :(得分:0)
终于找到了解决方案。问题出在这里:
estimote.beacons.startRangingBeaconsInRegion(
{},
onMonitoringSuccess,
onError);
结果Android允许在以下函数中使用{}参数(这意味着查找所有区域),但iOS不允许。指定区域后,我的应用程序成功找到了信标。
示例:
function successAuth(){
console.log("success auth, starting scan");
var region = { uuid: 'YOUR_UUID_HERE' }
estimote.beacons.startRangingBeaconsInRegion(
region,
onMonitoringSuccess,
onError);
}
Estimote开发者报价:
iOS仅允许扫描您知道的UUID的信标。所有Estimote Beacons都附带我们的默认UUID,“B9407F30-F5F8-466E-AFF9-25556B57FE6D”,即使没有登录,您也可以在雷达上看到这些信标。如果您将此UUID更改为其他内容,那么您需要保持登录状态,以便Estimote应用程序可以知道您的信标的UUID是什么,并扫描它们以及默认的UUID。
来源:https://forums.estimote.com/t/beacons-not-detected-using-estimote-ios-app/1580/5
这也解释了为什么Estimote App在登录后开始检测iBeacons。