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
Node.js/ Ionic 应用程序未在 Heroku 上正确部署