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