离子 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

离子中的 apns 错误设备令牌

ios11 中的离子静默推送中断?即使 content-available = 1 也会显示空白通知

离子科尔多瓦构建 ios 中的新 SubprocessError 错误

iPhone X 中的双离子闪屏

离子电容器版本号