离子应用程序未在iOS上检测到iBeacons(cordova-plugin-estimote)

时间:2016-04-06 14:15:45

标签: angularjs cordova ionic-framework ibeacon estimote


我目前正在研究混合应用程序(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)函数,就是这样。没有更多的日志,这意味着没有监控成功,没有错误,它只是没有找到任何信标。

任何帮助表示赞赏。感谢。

1 个答案:

答案 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。