离子 ios 应用程序中的 didRangeBeaconsInRegion 事件中的信标数组为空
Posted
技术标签:
【中文标题】离子 ios 应用程序中的 didRangeBeaconsInRegion 事件中的信标数组为空【英文标题】:Beacons array is empty in didRangeBeaconsInRegion event in ionic ios app 【发布时间】:2018-09-12 14:02:07 【问题描述】:我使用离子原生 ibeacon 库来检测信标。我可以用 android 检测信标,但是当我在 ios 中尝试时,我总是看到一个空的信标数组。 我试过这些东西,但仍然看不到 ios 中的信标(设备是 iphone 6s plus 11.4.1)(设备上启用了蓝牙服务)
我尝试了 requestWhenInUseAuthorization 和 requestAlwaysAuthorization。
我在 info.plist 中添加 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription 键
我的代码是这样的,它可以在安卓设备上运行
import Injectable from '@angular/core';
import Platform, Events from 'ionic-angular';
import IBeacon from "@ionic-native/ibeacon";
@Injectable()
export class BeaconProvider
delegate: any;
region: any;
constructor(
public platform: Platform,
public events: Events,
private iBeacon: IBeacon
)
this.initialise();
initialise(): any
let promise = new Promise((resolve, reject) =>
if (this.platform.is("cordova"))
this.iBeacon.requestAlwaysAuthorization();
// ALSO try this one too this.iBeacon.requestWhenInUseAuthorization();
this.delegate = this.iBeacon.Delegate();
this.delegate.didRangeBeaconsInRegion().subscribe(
data =>
this.events.publish("didRangeBeaconsInRegion", data);
//console.log("didRangebeacons__" + JSON.stringify(data)); // empty beacons array
,
error => console.error()
);
this.region = this.iBeacon.BeaconRegion("deskBeacon", "e2c56db5-dffb-48d2-b060-d0f5a71096e0");
this.iBeacon
.startRangingBeaconsInRegion(this.region)
.then(
() =>
resolve(true);
,
error =>
console.error("Failed to begin monitoring: ", error);
resolve(false);
);
else
resolve(false);
);
return promise;
编辑 我的位置服务已打开,并且我在 ios 或 android 中使用相同的 uuid(离子,相同的代码)。顺便说一下,我试图通过市场上的应用程序将 iphone 作为信标发射器,其他 iphone 可以将其视为信标。 这是信标范围应用程序的屏幕截图
【问题讨论】:
【参考方案1】:在 iOS 上需要检查的几件事:
-
转到设置、位置,然后检查您的应用是否已获得位置权限。
确保蓝牙已打开
尝试使用诸如 Locate Beacon 之类的第 3 方信标扫描仪,使用您的 UUID 对其进行配置,并确保它可以使用同一设备检测您的信标。
编辑:更多步骤
确保 iOS 已在“设置”中启用“定位”(整体设置,而不仅仅是针对您的应用)“设置”->“隐私”->“定位服务”
由于您可以在 Android 而不是 iOS 上检测到,请仔细检查您在 Android 上看到的 UUID,并确保它与您在 iOS 上输入的完全匹配。
如果配置中的 UUID 匹配,但仍无法检测到,请确认信标实际上正在发送 iBeacon 帧,而不是 AltBeacon 或 iPhone 默认看不到的某种格式。如果你在 Android 上使用Beacon Scope app,它会告诉你帧类型。
【讨论】:
感谢您的回答,我已经检查了 1,2,但我无法在 appstore 中找到我的 iphone 测试信标(尝试了 3 个 iphone 和一个 ipad)和几个信标定位器应用程序。所有 iphone 都是 11.4,ipad 是 11.1.1。我总是将这些应用程序的权限设置为“始终”。关于信标和iphone有什么我不知道的吗? 添加了另外两个故障排除步骤 感谢您的帮助。我编辑了我的问题并上传了beacon范围应用程序的屏幕截图,我的也是ibeacon,但iphone仍然看不到它。 好的,绝对清楚:即使使用配置了此 UUID 的 3rd 方扫描仪应用程序,您的 iPhone 仍然无法看到此信标? 我怀疑您的硬件信标正在将蓝牙传输中的制造商代码、BLE 标志标头或其他一些低级字段设置为 Apple 不喜欢但 Android 可以容忍的内容。如果是这种情况,那么具体是什么并不重要——解决方案将是相同的。您必须获得另一个不会发出 iOS 讨厌的有趣数据包的信标。以上是关于离子 ios 应用程序中的 didRangeBeaconsInRegion 事件中的信标数组为空的主要内容,如果未能解决你的问题,请参考以下文章
离子警报将 index.html 显示为 iOS 中的标题,但适用于 android
ios11 中的离子静默推送中断?即使 content-available = 1 也会显示空白通知