Table of Contents

Γιατί τα δεδομένα αισθητήρων είναι θέματα σε εφαρμογές καταλληλότητας

Οι σύγχρονες συσκευές iOS συσκευάζουν μια σειρά αισθητήρων που μπορούν να ανιχνεύσουν κίνηση, τοποθεσία, ακόμα και καρδιακό ρυθμό. Η ενσωμάτωση αυτών των αισθητήρων σε μια εφαρμογή εντοπισμού φυσικής κατάστασης μετατρέπει τα δεδομένα ακατέργαστου υλικού σε σημαντικές μετρήσεις όπως μετρήσεις βαθμίδων, απόσταση που ταξιδεύει, θερμίδες που καίγονται, και χάρτες διαδρομής. Πατώντας τους Core Motion και Core Location[ frameworks, οι προγραμματιστές μπορούν να δημιουργήσουν εφαρμογές που αισθάνονται ευφυείς και ανταποκρίνονται, δίνοντας στους χρήστες ακριβή ανατροφοδότηση στις προπονήσεις τους. Επιπλέον, τα δεδομένα αισθητήρων επιτρέπουν προχωρημένα χαρακτηριστικά όπως ταξινόμηση δραστηριότητας (περπάτημα, τρέξιμο, ποδηλασία) και ζωντανή ανατροφοδότηση κατά τη διάρκεια της άσκησης, τα οποία είναι απαραίτητα για τη συμμετοχή εφαρμογών καταλληλότητας.

Βασικοί αισθητήρες διαθέσιμοι σε συσκευές iOS

Πριν την κατάδυση σε κώδικα, είναι σημαντικό να καταλάβετε ποιοι αισθητήρες είναι στη διάθεσή σας:

  • Ακεραιομέτρο ⁇ μετρά τις δυνάμεις επιτάχυνσης, που χρησιμοποιούνται για την ανίχνευση βαθμίδων και τον προσανατολισμό.
  • Γυροσκόπιο ⁇ μέτρα περιστροφής, βοηθά στην ταξινόμηση δραστηριότητας και την ανίχνευση πτώσης.
  • GPS ⁇ παρέχει ακριβή τοποθεσία, ταχύτητα και παρακολούθηση διαδρομής.
  • Μαγνόμετρο ⁇ παρέχει κατεύθυνση πυξίδας, χρήσιμη για χαρακτηριστικά πλοήγησης.
  • Βαρόμετρο ⁇ μετρά τις υψομετρικές μεταβολές, που χρησιμοποιούνται για την καταμέτρηση δαπέδων και την αύξηση υψομέτρου.
  • Αισθητήρες ρυθμού καρδιάς ⁇ διαθέσιμοι μέσω Apple Watch ή τρίτων συσκευών Bluetooth, ενσωματωμένοι μέσω του HealthKit ή του Core Bluetooth.

Κάθε αισθητήρας απαιτεί ειδικά πλαίσια: Κίνηση πυρήνα για επιταχυνσιόμετρο, γυροσκόπιο και μαγνητόμετρο, Τοποθεσία πυρήνα για GPS και βαρόμετρο, ΥγείαKit για καρδιακούς ρυθμούς και άλλα δεδομένα υγείας.

⁇ του Αναπτυξιακού Περιβάλλοντος σας

Ξεκινήστε εγκαθιστώντας το Xcode (διαθέσιμο από το Mac App Store) και δημιουργώντας ένα νέο έργο iOS. Επιλέξτε το [[LFT:0]]App[[LPT:1]]]App[[[LFT:1]]] και βεβαιωθείτε ότι έχετε λογαριασμό Apple Developer για δοκιμές σε πραγματικές συσκευές. Τα δεδομένα αισθητήρων συχνά απαιτούν πραγματικό υλικό· οι προσομοιωτές έχουν περιορισμένη υποστήριξη αισθητήρων (π.χ., χωρίς ύψος GPS, χωρίς πραγματικό θόρυβο επιταχυντή).

Στο έργο σας Xcode, ενεργοποιήστε τις απαιτούμενες δυνατότητες στο πλαίσιο Υπογραφή & Δυνατότητες:

  • Υπηρεσίες τοποθέτησης ⁇ για παρακολούθηση GPS και περιοχής.
  • HealthKit ⁇ αν σκοπεύετε να διαβάσετε/γράψτε δεδομένα υγείας.
  • Background Modes ⁇ ελέγξτε τις “Ενημερώσεις θέσης” και “Audio, AirPlay, και Picture in Picture” εάν χρειάζεται η χρήση ήχου.

Προσθέστε τα κατάλληλα δικαιώματα και κλειδιά Info.plist. Για παράδειγμα, προσθέστε και με εύχρηστες εξηγήσεις.

Αιτούμαι Αδειών με τον Σωστό Τρόπο

Οι χρήστες είναι όλο και περισσότερο συνειδητοί απόρρητο. Πάντα να ζητάτε άδειες στο σημείο όπου το χαρακτηριστικό είναι πραγματικά απαραίτητο, όχι κατά την έναρξη. Για άδειες τοποθεσίας, χρησιμοποιήστε [[LFT:0]]CLLLocationManager[[LFT:1]:

import CoreLocation

let locationManager = CLLocationManager()
locationManager.delegate = self
locationManager.requestWhenInUseAuthorization()

Για τα δεδομένα κίνησης, χρησιμοποιήστε CMMtionManager[[LFT:1]]. Σημειώστε ότι τα δεδομένα κίνησης δεν απαιτούν ρητή άδεια από το χρήστη (θεωρείται συσκευή ⁇ εσωτερική), αλλά θα πρέπει να εξηγήσετε γιατί το χρειάζεστε στην πολιτική απορρήτου σας. Για τα δεδομένα HealthKit, πρέπει να έχετε έγκυρο HKHealthStore και να καλέσετε [[LFT:3]]. Παρέχετε σαφείς, συνοπτικές συμβολοσειρές στην Info.plist για να δημιουργήσετε εμπιστοσύνη.

Συλλογή δεδομένων αισθητήρων εφαρμογής

Η συλλογή δεδομένων είναι ο πυρήνας της εφαρμογής φυσικής κατάστασης.

Επιταχυνσιόμετρο και δεδομένα γυροσκοπίου με κεντρική κίνηση

Χρησιμοποιήστε CMMotionManager για να ξεκινήσετε ενημερώσεις. Επιλέξτε ένα διάστημα ενημέρωσης που εξισορροπεί την ακρίβεια και τη διάρκεια ζωής της μπαταρίας. Για την καταμέτρηση βημάτων, 1/50 δευτερόλεπτα (20 ms) είναι τυπικό, αλλά για ενημερώσεις UI, 1/10 δευτερόλεπτα είναι επαρκής.

import CoreMotion

let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
motionManager.startAccelerometerUpdates(to: .main) { (data, error) in
 guard let accelData = data else { return }
 // Use accelData.acceleration.x, .y, .z
}

Για το γυροσκόπιο και το μαγνητόμετρο, υπάρχουν παρόμοιες μέθοδοι: και . Αν χρειάζεστε στάση συσκευής (περιστροφή σε σχέση με τη βαρύτητα), χρησιμοποιήστε που συνδυάζει επιταχυνσιόμετρα, γυροσκόπια και μαγνητόμετρα δεδομένα.

GPS και δεδομένα τοποθεσίας με κύρια τοποθεσία

⁇ ενός CLLocationManager για να λαμβάνετε ενημερώσεις τοποθεσίας. ⁇ επιθυμητής ακρίβειας με βάση τη δραστηριότητα. Για εξωτερικούς χώρους λειτουργίας, είναι κατάλληλο; για εσωτερική πεζοπορία, εξοικονομεί μπαταρία.

locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.distanceFilter = 5 // meters
locationManager.startUpdatingLocation()

Εφαρμογή της μεθόδου ανάθεσης για την επεξεργασία νέων συντεταγμένων. Χρησιμοποιήστε την ]οριζόντια Ακρίβεια ιδιότητα για το φιλτράρισμα των ενδείξεων χαμηλής ποιότητας. Για τη χαρτογράφηση της διαδρομής, αποθηκεύστε συντεταγμένες μαζί με χρονοσφραγίδες.

Επεξεργασία δεδομένων αισθητήρων σε χρήσιμη μετρική

Τα πρώτα δεδομένα αισθητήρων είναι θορυβώδη. Τα στάδια επεξεργασίας περιλαμβάνουν συνήθως φιλτράρισμα, βαθμονόμηση και υπολογισμό.

Μέτρηση βήμα από επιταχυνσιόμετρο

Μια κοινή προσέγγιση είναι να υπολογίσει το Ευκλείδειο πρότυπο (sqrt(x2+y2+z2)), να εφαρμόσει ένα φίλτρο υψηλής διέλευσης για την αφαίρεση της βαρύτητας, στη συνέχεια να ανιχνεύσει κορυφές πάνω από ένα κατώφλι. Για την παραγωγή, εξετάστε τη χρήση του ενσωματωμένου προτύπου της Apple [[LFT:0]]CMPedometer[[[LFT:1]] που παρέχει μετρήσεις βημάτων και την ικανότητα χωρίς να χρειάζεται να υλοποιήσετε τον εντοπισμό μόνοι σας.

if CMPedometer.isStepCountingAvailable() {
 var pedometer = CMPedometer()
 pedometer.startUpdates(from: Date()) { (data, error) in
 if let steps = data?.numberOfSteps {
 // update UI
 }
 }
}

Ομοίως, το CMPedometer μπορεί να παρέχει απόσταση, ρυθμό και ανυψωμένα/αναχωρημένα δάπεδα.

Κατάταξη δραστηριότητας

Χρησιμοποιήστε CMMotionActivityManager[ για να ταξινομήσετε αυτόματα την κατάσταση κίνησης του χρήστη (περπάτημα, τρέξιμο, ποδηλασία, στάση).

let activityManager = CMMotionActivityManager()
activityManager.startActivityUpdates(to: .main) { (activity) in
 if activity?.walking == true {
 // treat as walking
 } else if activity?.running == true {
 // treat as running
 }
}

Απόσταση και ταχύτητα από GPS

Υπολογίστε απόσταση μεταξύ διαδοχικών σημείων θέσης χρησιμοποιώντας τη μέθοδο απόσταση(από:) επί του CLLΤοποθέτηση. Αθροίσεις για να πάρετε συνολική απόσταση. Η ταχύτητα είναι διαθέσιμη μέσω της ιδιότητας (m/s). Φιλτράρετε τις απίθανες ταχύτητες (π.χ., > 30 m/s για ανθρώπινη δραστηριότητα).

Εμφάνιση δεδομένων: Χάρτες και χάρτες

Για τους χάρτες διαδρομής, χρησιμοποιήστε MKMapView] και σχεδιάστε μια πολύγραμμη σύνδεση καταγεγραμμένων συντεταγμένων. Για τις μετρήσεις απόδοσης, χρησιμοποιήστε Χαρτάκια[ (μια δημοφιλή βιβλιοθήκη ανοιχτού κώδικα) ή της Apple Γραπτά Περιοδικής Απόδοσης Πλαίσιο (iOS 16+). Εμφάνιση συνοπτικών στατιστικών όπως ο μέσος ρυθμός, οι ζώνες καρδιακών ρυθμών και το προφίλ ανύψωσης.

import MapKit

let polyline = MKPolyline(coordinates: &coordinates, count: coordinates.count)
mapView.addOverlay(polyline)

Για καρδιακούς ρυθμούς, εάν συνδέονται μέσω HealthKit ή Bluetooth, επιδεικνύετε ένα γράφημα πραγματικού χρόνου χρησιμοποιώντας μια WKInterfaceGraphic ή SwiftUI Chart] view.

Χειρισμός ενημερώσεων ιστορικού

Οι εφαρμογές Fitness συχνά χρειάζεται να συλλέγουν δεδομένα όταν η εφαρμογή βρίσκεται στο παρασκήνιο. Ενεργοποιήστε [[LFT:0]]Background Modes[[LFT:1]] και επιλέξτε “Ενημερώσεις θέσης”. Για συνεχή τοποθεσία φόντου, χρησιμοποιήστε [[[LFT:16]]. Για σημαντική παρακολούθηση αλλαγών (λιγότερο συχνή, φιλική προς την μπαταρία), χρησιμοποιήστε [[LFT:17]].

Για τα δεδομένα κίνησης, οι ενημερώσεις ιστορικού είναι περιορισμένες. Το σύστημα μπορεί να παρέχει ενημερώσεις κίνησης μόνο ενώ η εφαρμογή βρίσκεται στο προσκήνιο ή λίγο μετά από μια ενημέρωση τοποθεσίας. Για να βελτιωθεί η αξιοπιστία, εξετάστε τη χρήση [CLActivityType που έχει οριστεί [] για να υποδείξει στο σύστημα ότι τα δεδομένα τοποθεσίας είναι σχετικά με την επεξεργασία.

Αποθήκευση δεδομένων και ενσωμάτωση του HealthKit

Αποθήκευση δεδομένων προπόνησης επίμονα. Επιλογές:

  • Δεδομένα κορεσμού ⁇ καλό για σύνθετα αντικείμενα και σχέσεις.
  • SQLite ⁇ ελαφρύς, άμεσος έλεγχος SQL.
  • ΧρήστηςΠροκαθορισμένα ⁇ μόνο για μικρές ρυθμίσεις, όχι για καταγραφές αισθητήρων.
  • HealthKit ⁇ Το κεντρικό αποθετήριο της Apple για τα δεδομένα υγείας.

Για να ενσωματώσετε το HealthKit, πρώτα ζητήστε άδεια εγγραφής δεδομένων προπόνησης και διαβάστε σχετικά δείγματα (καρδιακός ρυθμός, απόσταση).

let healthStore = HKHealthStore()
let workout = HKWorkout(activityType: .running, start: startDate, end: endDate, duration: duration, totalEnergyBurned: energy, totalDistance: distance, metadata: nil)
healthStore.save(workout) { (success, error) in
 // handle
}

Η ανάγνωση δειγμάτων καρδιακού ρυθμού κατά τη διάρκεια της προπόνησης μπορεί να γίνει ταυτόχρονα με χρήση ενός HKANchoredObjectQuery ή HKObserverQuery].

Βελτιστοποίηση της ζωής και της απόδοσης της μπαταρίας

Συνεχής χρήση αισθητήρων αποστραγγίζει μπαταρία. Εφαρμόστε αυτές τις στρατηγικές:

  • Ακριβώς διαστήματα ενημέρωσης ⁇ Χρησιμοποιήστε χαμηλότερη συχνότητα για ενημερώσεις UI, υψηλότερη μόνο όταν χρειάζεται.
  • Χρήση φιλτραρίσματος απόστασης ⁇ Για GPS, σετ σε λογική τιμή (π.χ., 10 μέτρα).
  • Πάυση όταν είναι σε στάση[ ⁇ Χρήση [CMMMtionActivityManager για τον εντοπισμό στατικών περιόδων και τη διακοπή των ενημερώσεων GPS.
  • Αναβαλλόμενες ενημερώσεις ⁇ Στο iOS 6+, μπορείτε να επιτρέψετε ενημερώσεις τοποθεσίας να αναβληθούν για εξοικονόμηση ισχύος χρησιμοποιώντας .
  • Επεξεργασία παρτίδας ⁇ Συλλέξτε δεδομένα στη μνήμη και γράψτε για να αποθηκεύετε περιοδικά (π.χ., κάθε 10 λεπτά).

Δεδομένα αισθητήρων δοκιμής και αποσφαλμάτωσης

Η δοκιμή σε προσομοιωτή είναι περιορισμένη. Πάντα να δοκιμάζετε σε πραγματικές συσκευές για ακριβή επιταχυνσιόμετρο, GPS και δεδομένα καρδιακού ρυθμού. Χρησιμοποιήστε τα [[LPT:0]]Simulate Location[[LFT:1]] χαρακτηριστικό για να δοκιμάσετε τις διαδρομές ελεύθερης οδήγησης. Για τα δεδομένα κίνησης, μπορείτε να χρησιμοποιήσετε τα [[LFT:2]Core Motion[[LPT:3]] αποσφαλμάτωση εργαλείων στο μενού του προγραμματιστή στη συσκευή. Καταγραφή αναγνώσεων αισθητήρων με χρονοσφραγίδες για να επαληθεύσετε την ορθότητα. Επίσης δοκιμή συμπεριφοράς φόντου επιτρέποντας την “Background Fint” και την προσομοίωση των συνθηκών δικτύου.

Εμπειρία χρήστη και Προσωπικές Συνεκτάσεις

Ακολουθήστε τις App Store Review Guidelines[[LPT:1]] και διατηρήστε μια σαφή πολιτική απορρήτου. Ποτέ μη μοιράζεστε δεδομένα αισθητήρων χωρίς ρητή συγκατάθεση. Χρησιμοποιήστε την επεξεργασία on-device όπου είναι δυνατόν. Για ανάλυση, ανώνυμα και συγκεντρωτικά.

Η εμπειρία χρήστη θα πρέπει να περιλαμβάνει:

  • Μια οθόνη onboarding που εξηγεί τη χρήση αισθητήρων και τα οφέλη.
  • Real ⁇ time ανάδραση κατά τη διάρκεια των προπονήσεων (ηχητικά σήματα, απτική ανατροφοδότηση).
  • Δυνατότητα να επανεξετάσει, να επεξεργαστεί, και να διαγράψει τα δεδομένα προπόνησης.
  • λειτουργικότητα εκτός σύνδεσης ⁇ αποθηκεύστε τοπικά δεδομένα και συγχρονίστε όταν το δίκτυο είναι διαθέσιμο.

Μελλοντικές Βελτιώσεις

Εξετάστε το ενδεχόμενο προσθήκης:

  • Ενσωμάτωση με Παρακολούθηση μήλου για την παρακολούθηση καρδιακών παλμών και προπόνηση.
  • Μοντέλα εκμάθησης μηχανών (Core ML) για την προηγμένη αναγνώριση δραστηριότητας.
  • Κοινωνικά χαρακτηριστικά (ηγετικές πινακίδες, προκλήσεις) χρησιμοποιώντας το CloudKit.
  • AR επικάλυψη δρομολογίων που χρησιμοποιούν ARKit.

Συμπέρασμα

Η δημιουργία μιας εφαρμογής εντοπισμού φυσικής κατάστασης με την ενσωμάτωση δεδομένων αισθητήρων στο iOS αποτελεί μια ανταμειφτική πρόκληση. Με τη μόχλευση Core Motion, Core Location, και HealthKit, μπορείτε να δημιουργήσετε μια εφαρμογή που παρέχει ακριβείς, ενεργές ιδέες, ενώ σέβεται την ιδιωτικότητα του χρήστη. Εστίαση στον καθαρό κώδικα, την αποδοτικότητα της μπαταρίας, και μια απρόσκοπτη εμπειρία χρήστη. Ξεκινήστε μικρή με βαθμιδωτή μέτρηση και τοποθεσία, στη συνέχεια επεκτείνονται σε καρδιακούς ρυθμούς και προηγμένη ανάλυση. Για επίσημη τεκμηρίωση, συμβουλευτείτε Core Motion, Core Location[[LFT:3]], και HealthKit] αναφορές.