[SWIFT] Modifications de l'emplacement principal dans iOS 14

Emplacement principal sur iOS14

Bonjour, cette fois depuis la rénovation du Core Location autour duquel a été changé sous iOS14 dans l'entreprise, ce sera un rappel à l'écrit. Je n'avais pas beaucoup d'articles, alors j'espère que cela aide quelqu'un!

environnement

macOS Catalina 10.15.6 Xcode Version 12.0.1

Deprecated

Tout d'abord, j'ai enquêté sur ce qui est devenu obsolète. La cible est un résumé de choses qui ne peuvent pas être utilisées avec iOS 14 cette fois.

CLLocationManager Requesting Authorization for Location Services

class func authorizationStatus() -> CLAuthorizationStatus
//Renvoie l'état d'authentification de l'application pour l'utilisation du service d'informations de localisation.

Initiating Beacon Ranging Requests

func startRangingBeacons(in: CLBeaconRegion)
//Démarre la livraison des notifications pour la zone de balise spécifiée.

func stopRangingBeacons(in: CLBeaconRegion)
//Arrête la livraison des notifications pour la zone de balise spécifiée.

var rangedRegions: Set<CLRegion>
//Arrête la livraison des notifications pour la zone de balise spécifiée.

Deferring Location Updates

class func deferredLocationUpdatesAvailable() -> Bool
//Renvoie une valeur booléenne qui indique si le périphérique prend en charge les mises à jour d'emplacement différées.

func allowDeferredLocationUpdates(untilTraveled: CLLocationDistance, timeout: TimeInterval)
//Demandez au responsable de l'emplacement de différer la livraison des mises à jour de l'emplacement jusqu'à ce que les critères spécifiés soient remplis.

func disallowDeferredLocationUpdates()
//Annulez le report de la mise à jour des informations de localisation pour cette application.

CLLocationManagerDelegate

Responding to Authorization Changes

func locationManager(CLLocationManager, didChangeAuthorization: CLAuthorizationStatus)
//Informer les délégués de l'état d'approbation lorsque l'application crée un gestionnaire d'emplacement et lorsque l'état d'approbation change
func locationManagerDidChangeAuthorization(CLLocationManager)
//Avertissez les délégués lorsque l'application crée un gestionnaire d'emplacement et lorsque l'état d'approbation change.

Responding to Ranging Events

func locationManager(CLLocationManager, didRangeBeacons: [CLBeacon], in: CLBeaconRegion)
//Avertit le délégué qu'une ou plusieurs balises sont à portée.

func locationManager(CLLocationManager, rangingBeaconsDidFailFor: CLBeaconRegion, withError: Error)
//Avertit le délégué qu'une erreur s'est produite lors de la collecte des informations de plage pour un ensemble de balises.

La zone autour de la balise a beaucoup changé. Au fait, Je n'ai pas utilisé CLBeacon et je ne sais pas ce que je peux faire, alors j'explorerai CLBeacon en profondeur la prochaine fois. Cela peut être utile pour quelque chose car il grimpe

Sujet principal

Eh bien, à partir de maintenant, le sujet principal, Ce qui était particulièrement visible dans cette mise à jour était Lors de l'autorisation des informations de localisation

Je pense personnellement que l'ajout d'articles est un changement majeur.

Il semble qu'Apple ait réfléchi à la raison pour laquelle cela s'est produit, vous pouvez donc le vérifier. Cette fois

la mise en oeuvre

En tant que mise en œuvre courante jusqu'à présent

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

Je pense avoir écrit le traitement de chaque statut comme celui-ci.

'authorizationStatus()' was deprecated in iOS 14.0

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

Comme c'était le cas, authorisationStatus () ne peut pas être utilisé. pourtant

public enum CLAuthorizationStatus : Int32 {}

Vous pouvez l'utiliser, donc je veux m'assurer que vous ne faites pas d'erreur.

Quant à ce changement

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

AuthorizationStatus a été récemment ajouté à CLLocationManager.

C'est compliqué ici, vous devez donc faire attention.

Le code suivant est le principal changement de 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 }
    //Une valeur qui indique le niveau de précision de position que l'application est autorisée à utiliser.

    @available(iOS 14.0, *)
    open var isAuthorizedForWidgetUpdates: Bool { get }
    //Une valeur booléenne qui indique si le widget est éligible pour recevoir des mises à jour de localisation.

    @available(iOS 14.0, *)
    open func requestTemporaryFullAccuracyAuthorization(withPurposeKey purposeKey: String, completion: ((Error?) -> Void)? = nil)
    //Demande l'autorisation de l'utilisateur pour utiliser le service de localisation de manière complètement précise et temporaire

    @available(iOS 14.0, *)
    open func requestTemporaryFullAccuracyAuthorization(withPurposeKey purposeKey: String)
    //Demande l'autorisation de l'utilisateur pour utiliser le service de localisation de manière complètement précise et temporaire
}

Lors de la séparation du traitement des statuts

func locationManager(CLLocationManager, didChangeAuthorization: CLAuthorizationStatus) {}

Parce que c'est obsolète

func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {}

Nous allons l'implémenter en utilisant.

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

De cette manière, le traitement du statut est ramifié.

Ensuite, il y a des informations de localisation précises

public enum CLAccuracyAuthorization : Int {
    case fullAccuracy = 0     //Informations de localisation précises ON
    case reducedAccuracy = 1  //Informations de position précises OFF
}

Ceci est nouvellement ajouté.

   switch manager.accuracyAuthorization {
   case .fullAccuracy:
       print("Informations de localisation précises")
   case .reducedAccuracy:
       print("Informations de localisation ambiguës")
   default:

   }

En tant que mise en œuvre, il est possible de créer des branches de cette manière. Pour expliquer ce changement aux non-ingénieurs Quand j'ai expliqué la réduction de la précision dans le terme [information de localisation ambiguë], il l'a compris. Selon le fonctionnaire (Traduction DeepL)

// 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.

L'utilisateur a choisi d'autoriser cette application à accéder à des informations de localisation inexactes. La surveillance régionale et la télémétrie des balises ne sont pas disponibles dans l'application. Autres API CoreLocation Peut être utilisé avec une précision réduite. La précision horizontale de l'estimation de position est de l'ordre d'environ 5 km. Atteindre // CoreLocation capture les estimations d'emplacement sur les points proches pour éviter les inexactitudes. Spécifie la région où se trouve le périphérique. De plus, CoreLocation est la zone où se trouve l'appareil. Je fais un devis. Préparez votre candidature pour recevoir jusqu'à 20 emplacements. Les minutes sont passées.

C'est écrit comme ça.

La partie principale de la correction dans mon travail était d'obtenir des informations de position précises et de les utiliser de différentes manières, donc cette fois j'ai principalement effectué la correction ici.

Sommaire

Cette fois, je me suis concentré sur la partie modifiée de Core Location. Comme il existe différents modèles en fonction de l'application, je pense qu'il peut y avoir des cas où la mise en œuvre souhaitée ne peut être réalisée que par la correspondance ci-dessus, je vais donc coller l'article auquel j'ai fait référence.

Confidentialité des informations de localisation encore améliorée dans iOS 14 [iOS14] WWDC 2020 Core Location New Element Precise

J'ai fait référence à l'article ci-dessus. Non écrit dans cet article --Comment utiliser requestTemporaryFullAccuracyAuthorization --À propos de info.plist

Officiel Apple What's new in location Core Location

Merci pour la lecture.

Recommended Posts

Modifications de l'emplacement principal dans iOS 14
Changements dans Mockito 2
Changements dans mybatis-spring-boot-starter 2.1
Changements dans mybatis-spring-boot-starter 1.3
Changements dans Java 11
Changements dans mybatis-spring-boot-starter 1.2
Changements majeurs dans la fonctionnalité de base de Spring Framework 5.0
Changements dans JUnit5M4-> M5
Changements majeurs dans Spring Boot 1.5
Notation de version Java qui change dans Java 10
Spécifiez l'emplacement Java dans eclipse.ini
Nouveau dans iOS14, Interaction à proximité