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

Posted

技术标签:

【中文标题】Ionic 应用程序未在 iOS 上检测到 iBeacons (cordova-plugin-estimote)【英文标题】:Ionic application not detecting iBeacons on iOS (cordova-plugin-estimote) 【发布时间】:2016-04-06 14:15:44 【问题描述】:

我目前正在开发一个混合应用程序 (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】:

终于找到了解决办法。问题出在这里:

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 信标都附带我们的默认 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。

【讨论】:

以上是关于Ionic 应用程序未在 iOS 上检测到 iBeacons (cordova-plugin-estimote)的主要内容,如果未能解决你的问题,请参考以下文章

注册期间未在 Macbook Pro 2020 M1 上检测到适用于 iOS 的 Apple Configurator

节点未在 Heroku 上正确部署的 Ionic 应用程序

Node.js/ Ionic 应用程序未在 Heroku 上正确部署

某些资产图像未在 Ionic 应用程序中显示

Ionic 应用程序未在 info plist 文件中显示各种权限,尽管它们位于 config.xml 中

CSP 未在远程桌面上检测到智能卡微型驱动程序