Обнаружение IBeacon на стороне флаттера ios - PullRequest
0 голосов
/ 11 июля 2020

При проявлении флаттера мне нужно детектировать IBeacon и сканировать его со всех сторон. В android я делаю это хорошо, и проблем нет.

Теперь на стороне ios я написал собственный плагин с использованием библиотеки CoreLocation и маяка обнаружения с менеджером местоположения.

его работает, и все в порядке.

Но когда я закрываю приложение и разрешение на местоположение всегда, после обнаружения IBeacon, My app go для некоторого плохого зрения, все тексты невидимы, а визуальные эффекты плохие.

На самом деле я установил некоторую проблему с флаттером в этой ссылке.

это мой ios побочный код

import CoreLocation
import Foundation
import UIKit

publi c class BeaconMainClass : NSObject, CLLocationManagerDelegate {

var onBeacon:BeaconDelegate!

var locationManager : CLLocationManager!

public var beaconRegion = CLBeaconRegion(proximityUUID: 
UUID(uuidString: "9a71beb2-0e89-4175-b7a8-6167781d1d3c")!,identifier: 
"beaconpay")

var isDeliverd = false

public 
init(locationManager:CLLocationManager,beaconListener:BeaconDelegate) 
{
    super.init()
    debugPrint("Hello")
    self.locationManager = locationManager
    self.onBeacon = beaconListener
             

   
    self.locationManager.delegate = self

    
    self.startMonitoring()
    self.startRanging()
    

    
}



public func startMonitoring() {
    locationManager.startMonitoring(for: self.beaconRegion)
    debugPrint("monitoring started")

}

public func stopMonitoring(){
    locationManager.stopMonitoring(for: self.beaconRegion)
    debugPrint("monitoring stopped")

}

public func startRanging(){
    locationManager.startRangingBeacons(in: self.beaconRegion)
    debugPrint("ranging start")
}
public func stopRanging(){
    locationManager.stopRangingBeacons(in: self.beaconRegion)
    debugPrint("ranging stop")

}


public func locationManager(_ manager: CLLocationManager, 
didEnterRegion region: CLRegion) {
    if CLLocationManager.isRangingAvailable() {
        debugPrint("enter region")
    startRanging()
    
    }

}

public func locationManager(_ manager: CLLocationManager, 
didExitRegion region: CLRegion) {
    debugPrint("exit region")
    isDeliverd = false

}





public func locationManager(_ manager: CLLocationManager, 
didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
    let knownBeacons = beacons.filter{ $0.proximity != 
CLProximity.unknown }
        if knownBeacons.count > 0 {
            for beacon in knownBeacons {
                print(beacon.accuracy)
                if beacon.proximity == CLProximity.immediate {
                    if !isDeliverd {
                        isDeliverd = true
                        self.onBeacon.onBeaconReady(beacon: beacon)
                    }else {
                        
                    }
                    
                }
            }
        }
    }

}

...