Массив Beacons пуст в событии didRangeBeaconsInRegion в приложении ionic ios - PullRequest
0 голосов
/ 12 сентября 2018

Я использую собственную ионную библиотеку ibeacon для обнаружения маяков. Я могу обнаружить маяки с android, но когда я пытаюсь в ios, я всегда вижу пустой массив маяков.Я попробовал эти вещи, но все еще не вижу маяки в ios (устройство iphone 6s плюс 11.4.1) (служба Bluetooth включена на устройстве)

  • Я пробовал как requestWhenInUseAuthorization, так и requestAlwaysAuthorization.

  • Я добавляю NSLocationAlwaysUsageDescription и NSLocationWhenInUseUsageDescription ключ в info.plist

мой код такой, он работает на устройстве 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;
      }
    }

РЕДАКТИРОВАТЬ Мои службы определения местоположения включены, и я использую тот же uuid в iOS или Android (ионный, тот же код). Таким образом, я пытался сделать iphone в качестве передатчика маяка с помощьюприложение на рынке, другой iphone может видеть его как маяк.А вот и скриншот приложения "Область маяка" enter image description here

1 Ответ

0 голосов
/ 12 сентября 2018

Несколько вещей, которые нужно проверить на iOS:

  1. Перейдите в настройки, местоположение и убедитесь, что вашему приложению предоставлено разрешение на местоположение.
  2. Убедитесь, что Bluetooth включен
  3. Попробуйте сторонний сканер маяков, такой как Locate Beacon, настройте его с вашим UUID и убедитесь, что он может обнаружить ваш маяк с тем же устройством.

РЕДАКТИРОВАТЬ: еще несколько шагов

  1. Убедитесь, что в настройках iOS включено Местоположение (общие настройки, а не только для вашего приложения). Настройки -> Конфиденциальность -> Службы определения местоположения

  2. Поскольку вы можете определять на Android, но не на iOS, дважды проверьте UUID, который вы видите на Android, и убедитесь, что он точно соответствует тому, что вы вводите на iOS.

  3. Если UUID в конфигурации совпадает, но все равно не обнаружит, убедитесь, что маяк действительно отправляет фрейм iBeacon, а не AltBeacon или какой-либо другой формат, который iPhone не будет видеть по умолчанию. Если вы используете приложение Beacon Scope для Android, оно сообщит вам тип кадра.

enter image description here

...