离子ios应用程序的didRangeBeaconsInRegion事件中的信标数组为空

时间:2018-09-12 14:02:08

标签: ios ionic-framework ibeacon ionic-native

我使用离子本机ibeacon库检测信标。我可以使用android检测信标,但是当我在ios中尝试时,我总是看到一个空的信标数组。 我尝试了这些操作,但仍无法在ios(设备为iPhone 6s和11.4.1)中看到信标(设备上启用了蓝牙服务)

  • 我尝试了requestWhenInUseAuthorization和 requestAlwaysAuthorization。

  • 我在info.plist中添加了NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription键

我的代码就是这样,它可以在android设备上运行

    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会将其视为信标。 这是信标范围应用enter image description here

的屏幕截图

1 个答案:

答案 0 :(得分:2)

在iOS上需要检查的几件事:

  1. 转到设置,位置,然后检查是否已向您的应用授予位置权限。
  2. 确保蓝牙已打开
  3. 尝试使用“第三方信标”扫描器(例如“定位信标”),使用您的UUID对其进行配置,并确保它可以使用同一设备检测到您的信标。

编辑:更多步骤

  1. 确保iOS的“设置”(不是仅针对您的应用,是整体设置)中打开了“位置”设置->隐私->位置服务

  2. 由于您可以在Android上检测到,但无法在iOS上检测到,因此请仔细检查在Android上看到的UUID,并确保它与您在iOS上输入的内容完全匹配。

  3. 如果配置中的UUID匹配,但仍然无法检测到,请验证该信标实际上是在发送iBeacon帧,而不是AltBeacon或默认情况下不会看到iPhone的某种格式。如果您将Beacon Scope app用于Android,它将告诉您帧类型。

enter image description here