[SWIFT] Änderungen des Kernstandorts in iOS 14

Kernspeicherort unter iOS14

Hallo, diesmal seit der Renovierung des Kernstandorts, um den in iOS14 im Geschäft geändert wurde, wird es eine Erinnerung an das Schreiben sein. Ich hatte nicht viele Artikel, also hoffe ich, dass es jemandem hilft!

Umgebung

macOS Catalina 10.15.6 Xcode Version 12.0.1

Deprecated

Zuerst habe ich untersucht, was veraltet ist. Das Ziel ist eine Zusammenfassung der Dinge, die diesmal mit iOS 14 nicht verwendet werden können.

CLLocationManager Requesting Authorization for Location Services

class func authorizationStatus() -> CLAuthorizationStatus
//Gibt den Authentifizierungsstatus der App für die Verwendung des Standortinformationsdienstes zurück.

Initiating Beacon Ranging Requests

func startRangingBeacons(in: CLBeaconRegion)
//Startet die Zustellung von Benachrichtigungen für den angegebenen Beacon-Bereich.

func stopRangingBeacons(in: CLBeaconRegion)
//Stoppt die Zustellung von Benachrichtigungen für den angegebenen Beacon-Bereich.

var rangedRegions: Set<CLRegion>
//Stoppt die Zustellung von Benachrichtigungen für den angegebenen Beacon-Bereich.

Deferring Location Updates

class func deferredLocationUpdatesAvailable() -> Bool
//Gibt einen booleschen Wert zurück, der angibt, ob das Gerät verzögerte Standortaktualisierungen unterstützt.

func allowDeferredLocationUpdates(untilTraveled: CLLocationDistance, timeout: TimeInterval)
//Bitten Sie den Standortmanager, die Übermittlung von Standortaktualisierungen zu verschieben, bis die angegebenen Kriterien erfüllt sind.

func disallowDeferredLocationUpdates()
//Brechen Sie die Verschiebung der Standortinformationsaktualisierung für diese App ab.

CLLocationManagerDelegate

Responding to Authorization Changes

func locationManager(CLLocationManager, didChangeAuthorization: CLAuthorizationStatus)
//Benachrichtigen Sie die Delegierten über den Genehmigungsstatus, wenn die App einen Standortmanager erstellt und wenn sich der Genehmigungsstatus ändert
func locationManagerDidChangeAuthorization(CLLocationManager)
//Benachrichtigen Sie die Delegatoren, wenn die App einen Standortmanager erstellt und wenn sich der Genehmigungsstatus ändert.

Responding to Ranging Events

func locationManager(CLLocationManager, didRangeBeacons: [CLBeacon], in: CLBeaconRegion)
//Benachrichtigt den Delegierten, dass sich ein oder mehrere Beacons in Reichweite befinden.

func locationManager(CLLocationManager, rangingBeaconsDidFailFor: CLBeaconRegion, withError: Error)
//Benachrichtigt den Delegaten, dass beim Sammeln der Bereichsinformationen für eine Reihe von Beacons ein Fehler aufgetreten ist.

Der Bereich um das Leuchtfeuer hat sich ziemlich verändert. Apropos, Ich habe CLBeacon nicht verwendet und weiß nicht, was ich tun kann. Deshalb werde ich CLBeacon das nächste Mal eingehend untersuchen. Es kann für etwas nützlich sein, weil es klettert

Hauptthema

Nun, von hier an das Hauptthema, Was in diesem Update besonders auffiel, war Wenn Sie Standortinformationen zulassen

Ich persönlich denke, dass das Hinzufügen von Elementen eine große Änderung darstellt.

Es scheint, dass Apple darüber nachgedacht hat, warum dies passiert ist, sodass Sie es überprüfen können. Diesmal diesmal

Implementierung

Als bisher übliche Umsetzung

let status = CLLocationManager.authorizationStatus() 
    switch status {
    case .authorizedWhenInUse:
    // ...
    case .authorizedAlways:
    // ... 
    case .denied:
    // ...
    case .notDetermined:
    // ...
    case .restricted:
    // ...
    case .authorized:
    // ...

Ich glaube, ich habe die Behandlung für jeden Status wie diesen geschrieben.

'authorizationStatus()' was deprecated in iOS 14.0

    @available(iOS, introduced: 4.2, deprecated: 14.0)
    open class func authorizationStatus() -> CLAuthorizationStatus

Seitdem kann authorisationStatus () nicht verwendet werden. jedoch

public enum CLAuthorizationStatus : Int32 {}

Sie können dies verwenden, daher möchte ich sicherstellen, dass Sie keinen Fehler machen.

Wie für diese Änderung

open class CLLocationManager : NSObject {
    // ...
    @available(iOS 14.0, *)
    open var authorizationStatus: CLAuthorizationStatus { get }
}

AuthorizationStatus wurde neu zu CLLocationManager hinzugefügt.

Hier ist es kompliziert, also sollten Sie vorsichtig sein.

Der folgende Code ist die Hauptänderung von CLLocationManager.


open class CLLocationManager : NSObject {
    // ...
    @available(iOS 14.0, *)
    open var authorizationStatus: CLAuthorizationStatus { get }

    @available(iOS, introduced: 4.2, deprecated: 14.0)
    open class func authorizationStatus() -> CLAuthorizationStatus

    @available(iOS 14.0, *)
    open var accuracyAuthorization: CLAccuracyAuthorization { get }
    //Ein Wert, der die Positionsgenauigkeit angibt, die die App verwenden darf.

    @available(iOS 14.0, *)
    open var isAuthorizedForWidgetUpdates: Bool { get }
    //Ein boolescher Wert, der angibt, ob das Widget berechtigt ist, Standortaktualisierungen zu erhalten.

    @available(iOS 14.0, *)
    open func requestTemporaryFullAccuracyAuthorization(withPurposeKey purposeKey: String, completion: ((Error?) -> Void)? = nil)
    //Fordert die Erlaubnis des Benutzers an, den Ortungsdienst vollständig genau und vorübergehend zu nutzen.

    @available(iOS 14.0, *)
    open func requestTemporaryFullAccuracyAuthorization(withPurposeKey purposeKey: String)
    //Fordert die Erlaubnis des Benutzers an, den Ortungsdienst vollständig genau und vorübergehend zu nutzen.
}

Beim Trennen der Statusverarbeitung

func locationManager(CLLocationManager, didChangeAuthorization: CLAuthorizationStatus) {}

Weil dies veraltet ist

func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {}

Wir werden es mit implementieren.

func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
 let status = manager.authorizationStatus
 switch status {
   case .authorizedAlways, .authorizedWhenInUse:
   // ...
   case .notDetermined, .denied, .restricted:
   // ...
   default: 
   // ...
 }
}

Auf diese Weise wird die Verarbeitung für den Status verzweigt.

Als nächstes geht es um genaue Standortinformationen

public enum CLAccuracyAuthorization : Int {
    case fullAccuracy = 0     //Genaue Standortinformationen EIN
    case reducedAccuracy = 1  //Genaue Positionsinformationen AUS
}

Dies wurde neu hinzugefügt.

   switch manager.accuracyAuthorization {
   case .fullAccuracy:
       print("Genaue Standortinformationen")
   case .reducedAccuracy:
       print("Mehrdeutige Standortinformationen")
   default:

   }

Als Implementierung ist es möglich, auf diese Weise zu verzweigen. Wenn Sie diese Änderung Nicht-Ingenieuren erklären Als ich die reduzierte Genauigkeit im Begriff [mehrdeutige Standortinformationen] erklärte, verstand er sie. Nach Angaben des Beamten (DeepL Übersetzung)

// The user has chosen to grant this application access to location information with reduced accuracy. // Region monitoring and beacon ranging are not available to the application. Other CoreLocation APIs // are available with reduced accuracy. // Location estimates will have a horizontalAccuracy on the order of about 5km. To achieve the // reduction in accuracy, CoreLocation will snap location estimates to a nearby point which represents // the region the device is in. Furthermore, CoreLocation will reduce the rate at which location // estimates are produced. Applications should be prepared to receive locations that are up to 20 // minutes old.

Der Benutzer hat dieser Anwendung den Zugriff auf ungenaue Standortinformationen gewährt. Regionale Überwachung und Beacon Ranging sind in der Anwendung nicht verfügbar. Andere CoreLocation-APIs Kann mit reduzierter Genauigkeit verwendet werden. Die horizontale Genauigkeit der Positionsschätzung liegt in der Größenordnung von etwa 5 km. Erreichen // CoreLocation fängt Standortschätzungen an nahe gelegenen Punkten ab, um Ungenauigkeiten zu vermeiden. Gibt die Region an, in der sich das Gerät befindet. Darüber hinaus ist CoreLocation der Bereich, in dem sich das Gerät befindet. Ich mache ein Zitat. Bereiten Sie Ihre Bewerbung vor, um bis zu 20 Standorte zu erhalten. Minuten sind vergangen.

Es ist so geschrieben.

Der Hauptteil der Korrektur in meiner Arbeit bestand darin, genaue Positionsinformationen zu erhalten und diese auf verschiedene Arten zu verwenden. Deshalb habe ich diesmal hauptsächlich die Korrektur hier vorgenommen.

Zusammenfassung

Dieses Mal habe ich mich auf den veränderten Teil von Core Location konzentriert. Da es je nach Anwendung verschiedene Muster gibt, denke ich, dass es Fälle geben kann, in denen die gewünschte Implementierung nicht nur durch die obige Korrespondenz erreicht werden kann. Deshalb werde ich den Artikel einfügen, auf den ich mich bezog.

Datenschutz in Bezug auf Standortinformationen in iOS 14 weiter verbessert [iOS14] WWDC 2020 Core Location New Element Precise

Ich habe auf den obigen Artikel verwiesen. Nicht in diesem Artikel geschrieben

Apple-Beamter What's new in location Core Location

Danke fürs Lesen.

Recommended Posts

Änderungen des Kernstandorts in iOS 14
Änderungen in Mockito 2
Änderungen im Mybatis-Spring-Boot-Starter 2.1
Änderungen im Mybatis-Spring-Boot-Starter 1.3
Änderungen in Java 11
Änderungen im Mybatis-Spring-Boot-Starter 1.2
Wichtige Änderungen in der Kernfunktionalität von Spring Framework 5.0
Änderungen in JUnit5M4-> M5
Wichtige Änderungen in Spring Boot 1.5
Java-Versionsnotation, die sich in Java 10 ändert
Geben Sie den Java-Speicherort in eclipse.ini an
Neu in iOS14, Interaktion in der Nähe