Table of Contents
Introduction aux rappels basés sur l'emplacement dans iOS
Des rappels basés sur la localisation transforment une application mobile standard en un assistant contextuel qui émet des notifications en temps opportun précisément quand un utilisateur entre ou quitte une zone géographique définie. De rappeler à un utilisateur de prendre une ordonnance près d'une pharmacie pour lui notifier de mettre en place une alarme à domicile lors de son départ de la maison, cette fonctionnalité améliore la productivité quotidienne et l'engagement. Dans iOS, la combinaison du cadre ]]]]]]][F][FLT:][F][F][FLT
Comprendre les lieux de base et les notifications aux utilisateurs
Les deux principaux cadres iOS concernés sont Localisation de base[ et Notifications d'utilisateur[.Localisation de base gère tous les suivis géographiques, y compris la surveillance de la région (géofences), les services de localisation de changement significatif et les mises à jour de position GPS standard.Notifications d'utilisateur gère l'horaire, la présentation et la gestion des notifications locales et à distance.
La surveillance régionale avec est l'approche la plus simple. Vous définissez une zone circulaire (coordonnée centrale et rayon) et vous demandez à Core Location d'aviser votre application lorsque l'appareil franchit la frontière. Pour recevoir ces événements pendant que l'application est en arrière-plan ou terminée, vous devez demander -toujours l'autorisation de localisation (pas seulement -quand en cours d'utilisation).
Établissement des autorisations
Demande d'autorisation de localisation
Avant que la surveillance de l'emplacement puisse commencer, votre application doit obtenir la permission explicite de l'utilisateur. iOS affiche une invitation système qui inclut la chaîne de but de votre . Pour la surveillance de la région de fond, vous avez besoin (iOS 11+) ou . Le code devrait d'abord appeler sur l'instance :
let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestAlwaysAuthorization()
Apple encourage les développeurs à reporter la demande de permission jusqu'à ce que l'utilisateur ait un contexte. Ne request always-autorization on first launch; au contraire, expliquez l'avantage avant de montrer l'invite.
Demande d'autorisation de notification
Simultanément, vous devez demander la permission d'afficher des notifications. Ceci est fait par :
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
// Handle response
}
Si l'utilisateur refuse la permission de notification, envisagez d'offrir une alternative (par exemple, les alertes in-app) ou d'expliquer comment les notifications améliorent l'expérience. Les deux permissions sont indépendantes – un utilisateur peut autoriser l'emplacement mais désactiver les notifications, ou vice versa.
Configuration des géofences et surveillance régionale
Définition d'une région circulaire
Une géofence est mise en œuvre en utilisant . Vous fournissez une coordonnée centrale (latitude et longitude) et un rayon en mètres. Le rayon minimum iOS prend en charge de manière fiable environ 100 mètres, bien que les tests sur des appareils avec un bon GPS peuvent produire des rayons plus petits. Précisez si vous voulez être informé à l'entrée, à la sortie, ou aux deux:
let center = CLLocationCoordinate2D(latitude: 37.7749, longitude: -122.4194)
let region = CLCircularRegion(center: center, radius: 150, identifier: "OfficeRegion")
region.notifyOnEntry = true
region.notifyOnExit = true
locationManager.startMonitoring(for: region)
La chaîne doit être unique par région; elle est utilisée pour correspondre aux événements entrants. iOS prend en charge un maximum de 20 régions contrôlées simultanément par application. Si vous en avez besoin, envisagez de combiner des régions ou d'utiliser un emplacement de changement significatif pour déclencher une vérification plus granulaire.
Surveillance de plusieurs régions
Souvent, vous aurez de nombreux rappels (p. ex., géofences créées par l'utilisateur). Stockez les identifiants de région dans une base de données locale (données de base, royaume ou userDefaults). Lorsque l'application démarre, réenregistrez toutes les régions actives.
// Remove regions when no longer needed
locationManager.stopMonitoring(for: region)
Surveiller la méthode de délégation pour attraper les cas où la surveillance régionale n'est pas supportée (p. ex. sur les appareils plus anciens) ou est limitée par les paramètres du système.
Manipulation des événements régionaux
Lorsqu'un appareil franchit une limite de géofence, l'emplacement principal appelle l'une des deux méthodes de délégation : ou . Votre mise en œuvre doit vérifier l'identificateur de région et ensuite planifier une notification locale.
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
guard region.identifier == "OfficeRegion" else { return }
scheduleNotification(title: "Welcome to Office", body: "Don't forget to scan your badge.")
}
Notez que ces méthodes de délégation sont appelées même si votre application est suspendue ; iOS va réveiller votre application en arrière-plan brièvement. Vous avez environ 30 secondes pour exécuter le code avant que le système vous suspende à nouveau. Utilisez ce temps pour planifier la notification (ou gérer d'autres logiques) le plus rapidement possible.
Traitement de la restauration d'état après le redémarrage de l'application
Une fois l'application terminée (par exemple, force-quits utilisateur ou le système récupère la mémoire), les régions sont toujours surveillées par le système. Cependant, lorsqu'un événement se produit et que l'application ne fonctionne pas, iOS relance votre application dans l'arrière-plan et délivre le même message délégué. Vous devez vous assurer que votre code d'initialisation apps configure correctement le délégué et rétablit tout état nécessaire.
Envoi des notifications locales
Création du contenu de notification
Utilisez pour définir le titre, le corps, le son et les données personnalisées:
let content = UNMutableNotificationContent()
content.title = "Reminder"
content.body = "You're near the store! Don't forget to buy groceries."
content.sound = .default
content.userInfo = ["regionID": "StoreRegion"]
Vous pouvez également inclure un pour activer des actions personnalisées (par exemple, -Snooze ou -Mark comme Done).
Déclencheur et demande
Parce que nous voulons que la notification tire immédiatement après l'événement régional, nous utilisons un déclencheur d'intervalle de temps avec un très court délai (1 seconde).
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
// Log error (e.g., notification not added)
}
}
Si vous voulez remplacer une notification en attente (p. ex., mettre à jour le message), utilisez le même identifiant.
Personnalisation du son et de l'insigne
Vous pouvez fournir un fichier sonore personnalisé dans votre paquet (doit être inférieur à 30 secondes) en définissant . Les numéros d'insigne sont définis par (ou incrément en fonction de l'application UIApplication.shared.applicationIconBadgeNumber). Rappelez-vous que l'insigne n'est effacé que lorsque l'utilisateur ouvre l'application ou que vous la réinitialisez manuellement.
Gestion des erreurs et considérations relatives à la batterie
Erreurs courantes
La surveillance régionale peut échouer pour plusieurs raisons:
- Non pris en charge sur l'appareil – certains iPads plus anciens ou touches iPod ne disposent pas d'une puce cellulaire/GPS. Vérifiez .
- Les services de localisation désactivés – peuvent retourner faux.
- Autorisation refusée[ – est ou .
- La limite de région dépassée – si vous essayez de surveiller plus de 20 régions, échouera.
Mettre en œuvre le délégué pour enregistrer l'erreur et informer l'utilisateur gracieusement (p. ex., -Incapacité de surveiller cet emplacement).
Optimisation de la batterie
Le système optimise déjà la surveillance de la région en utilisant la tour cellulaire et le positionnement Wi-Fi lorsque c'est possible, mais vous pouvez réduire encore l'impact :
- Surveiller seulement autant de régions que nécessaire (garder moins de 20 ans).
- Utiliser des rayons plus grands lorsque la précision n'est pas critique (p. ex. 500m vs 50m).
- Désactiver la surveillance de la région lorsque l'application entre dans le contexte pour des tâches non liées (utiliser dans les rappels appropriés du cycle de vie).
- Pour les rappels non critiques, envisager d'utiliser un service de localisation de changement significatif[ () qui ne fournit des mises à jour que lorsque l'appareil se déplace de façon significative (500m ou plus) et consomme moins de puissance.
Essais de rappels en fonction de l'emplacement
Simulation de l'emplacement dans Xcode
Simulator Xcode , vous pouvez simuler les changements de localisation. Utilisez la fonction -Simula Location - (Debug > Simulate Location) et choisissez un fichier GPX ou un lecteur d'autoroute. Vous pouvez aussi définir manuellement les coordonnées via le bouton -Simula Location - dans la barre de débogage. Cependant, notez que la surveillance de la région de fond ne fonctionne pas dans le simulateur pour tous les scénarios; il est recommandé de tester sur un appareil physique.
Tests d'unité de rédaction pour la logique régionale
Isoler les méthodes de délégation et l'échéancier de notification en éléments testables. Mock le et en utilisant des protocoles.
protocol RegionHandler {
func didEnterRegion(with identifier: String)
}
class MockNotificationCenter: UNUserNotificationCenter {
var addedRequest: UNNotificationRequest?
override func add(_ request: UNNotificationRequest, withCompletionHandler: (Error?) -> Void) {
addedRequest = request
}
}
Tester que l'entrée dans une région produit le titre et le corps de notification corrects, et que les erreurs sont traitées.
Liste de contrôle des essais dans le monde réel
- Tester les événements d'entrée et de sortie pendant que l'application est au premier plan, arrière-plan et terminé.
- Vérifier que les régions qui se chevauchent plusieurs fois déclenchent des notifications indépendantes.
- Vérifiez le drain de la batterie pendant plusieurs heures de surveillance.
- Testez avec les services de localisation désactivés, Wi-Fi désactivés et données cellulaires désactivées.
- Assurez-vous que les appels de notification ne sont pas répétés si l'utilisateur rentre de nouveau dans la même région dans un court laps de temps – implémentez une période de --cool-down--- en utilisant UserDefaults horodatages.
Vie privée et expérience utilisateur Pratiques exemplaires
Transparence et consentement
Pour la plupart des rappels basés sur l'emplacement, l'autorisation --toujours - est nécessaire pour la surveillance des antécédents, mais vous pouvez toujours expliquer pourquoi. Fournissez un écran in-app avant l'invite système qui décrit la fonctionnalité et comment les données de localisation sont utilisées (p. ex. -- Nous surveillons votre emplacement pour vous envoyer des rappels lorsque vous entrez ou quittez des endroits désignés. Vos données de localisation ne sont jamais téléchargées sur nos serveurs.-)
Permettre aux utilisateurs de gérer les rappels
Offrez une interface utilisateur où les utilisateurs peuvent voir tous les rappels actifs, voir la zone géofencée sur une carte, et supprimer les rappels individuellement. Laissez-les également temporairement pauser tous les rappels (p. ex. pendant les vacances).
Commentaires et États vides
Si aucun rappel n'est défini, affichez un état vide clair avec un appel à l'action (=Tap + pour ajouter un rappel d'emplacement=). Si les permissions sont refusées, affichez un message expliquant ce que l'utilisateur manque et un bouton se reliant aux paramètres.
Ne pas déranger et alertes critiques
Respectez le mode Focus actuel de l'utilisateur (Ne pas déranger) – le système supprime automatiquement les notifications lorsqu'elles sont activées. Ne demandez pas l'autorisation d'alerte critique à moins que le rappel ne soit vraiment urgent (p. ex. médicament) et approuvé par Apple.
Améliorations avancées
Déclencheurs iBeacon
Pour la précision intérieure, envisagez d'utiliser iBeacon () plutôt que des géofences. Les balises fournissent une précision jusqu'à quelques mètres. La configuration est similaire: définir une région de balise par UUID, les valeurs majeures et mineures, puis surveiller pour l'entrée/sortie et aussi la plage de proximité. iBeacon monitoring ne nécessite pas toujours l'autorisation (lorsque l'utilisation est suffisante) mais l'impact de la batterie est comparable.
Combiner avec un emplacement de changement important
Les mises à jour de localisations importantes sont déclenchées par des changements de tour cellulaire environ tous les 500 mètres. Vous pouvez les utiliser pour actualiser la liste des géofences voisines même lorsque l'appareil se déplace rapidement (par exemple, dans une voiture). Cependant, les événements d'entrée/sortie sont calculés par votre propre logique plutôt que par le système dédié de surveillance de la région.
Utilisation des tâches de fond pour pré-obtention
Si vos rappels nécessitent des données réseau (p. ex., heures d'ouverture du magasin), vous pouvez programmer un (introduit dans iOS 13) pour actualiser les données de manière opportuniste. Mais attention à ne pas les combiner avec des événements de localisation pour éviter de sembler suivre l'utilisateur en arrière-plan à des fins non-localisées.
Traitement de notifications multiples de la même région
Si un utilisateur persiste sur une frontière régionale, il peut recevoir des événements d'entrée/sortie répétés. Implémenter un chronomètre de refroidissement (p. ex., -Ne pas déclencher une autre notification pour cette région pendant au moins 5 minutes).
Conclusion
En combinant la surveillance de la région de la localisation de base avec les notifications de l'utilisateur, vous pouvez créer des fonctionnalités qui vous sentent intuitives et utiles. La clé du succès réside dans le respect de la vie privée des utilisateurs, l'optimisation de l'utilisation de la batterie, le traitement gracieusement des erreurs et la fourniture d'une interface propre pour la gestion des rappels. Au fur et à mesure que iOS continue d'évoluer, de nouvelles capacités telles que (iOS 17+) simplifient encore la surveillance des antécédents.
Pour plus de détails, consulter la documentation officielle Apple: