[Video Summary] Ch. 8.12 - LocationManager: Getting Device Location with SwiftUI (2024)

SwiftUI 6 Th02 2025

Mô tả nhanh

Video này hướng dẫn cách sử dụng LocationManager để lấy vị trí thiết bị trong SwiftUI, làm nền tảng cho việc tra cứu địa điểm và vẽ vị trí trên bản đồ.

Video

Click vào hình dưới để mở:
Ch. 8.12 - LocationManager: Getting Device Location with SwiftUI (2024)

Mô tả chi tiết

Video này hướng dẫn cách sử dụng LocationManager để lấy vị trí thiết bị trong SwiftUI, làm nền tảng cho việc tra cứu địa điểm và vẽ vị trí trên bản đồ.
Để thực hiện điều này, video hướng dẫn từng bước như sau:

  1. Tạo Project Mới:
    • Tạo một project iOS mới trong Xcode với tên "location and place lookup".
    • Chuyển đổi folder thành group (tùy chọn).
    • Tạo một file Swift mới tên LocationManager.
  2. Cài đặt LocationManager:
    • Import MapKit.
    • Khai báo class LocationManager kế thừa NSObject và conform với CLLocationManagerDelegate.
    • Thêm comment: "critically important always add info.plist message for privacy location when in use usage description"
    • Cấu hình Info.plist bằng cách thêm: Privacy - Location When In Use Usage Description với giá trị mô tả quyền truy cập vị trí (ví dụ: "This app requires access to the device's location").
    • Tạo các thuộc tính:
      • location: kiểu CLLocation? để lưu trữ vị trí.
      • locationManager: kiểu CLLocationManager.
    • Tạo initializer:
      • Gọi super.init().
      • Đặt desiredAccuracy của locationManager thành kCLLocationAccuracyBest.
      • Đặt delegate của locationManager thành self.
      • Gọi requestWhenInUseAuthorization() để yêu cầu quyền truy cập vị trí.
      • Gọi startUpdatingLocation() để bắt đầu cập nhật vị trí.
  3. Triển khai Delegate Methods:
    • Tạo extension cho LocationManager để chứa các delegate method.
    • Triển khai locationManager(_:didUpdateLocations:) delegate method:
      • Lấy vị trí mới nhất từ mảng locations.
      • Gán vị trí mới vào thuộc tính location.
      • (Tùy chọn) Dừng cập nhật vị trí sau khi lấy được vị trí đầu tiên (locationManager.stopUpdatingLocation()).
    • Triển khai locationManager(_:didFailWithError:) để bắt lỗi nếu có.
      • Gán lỗi vào biến errorMessage.
      • In ra console thông tin lỗi.
    • Triển khai locationManagerDidChangeAuthorization(_:) để theo dõi thay đổi quyền truy cập vị trí.
      • Cập nhật trạng thái vào thuộc tính authorizationStatus.
      • Sử dụng switch case để xử lý các trường hợp cụ thể:
        • .authorizedWhenInUse, .authorizedAlways: in thông báo và gọi hàm bắt đầu cập nhật vị trí
        • .denied, .restricted: in thông báo từ chối quyền truy cập, gán lỗi và dừng cập nhật vị trí
        • .notDetermined: In thông báo và gọi yêu cầu cấp quyền
        • default: Chứa @unknown default, để bắt các trường hợp có thể xảy ra trong tương lai.
  4. Sử dụng LocationManager trong ContentView:
    • Khai báo biến @State locationManager kiểu LocationManager
    • Trong Text view, hiển thị latitude và longitude từ locationManager.location.
    • Sử dụng nil coalescing để xử lý trường hợp location là nil.
  5. Chạy và kiểm tra:
    • Chạy app trên simulator.
    • Kiểm tra console để xem latitude và longitude.
    • Sử dụng Google Maps để kiểm tra vị trí trả về.
    • Thay đổi vị trí simulator và quan sát sự thay đổi trên app.
    • Thay đổi quyền truy cập vị trí trong Setting của simulator và kiểm nghiệm các trường hợp được bắt trong hàm ủy nhiệm.

Video kết thúc với việc nhấn mạnh tính tái sử dụng của class LocationManager và giới thiệu nội dung của bài học tiếp theo là về tra cứu địa điểm.

Chúc bạn có những trải nghiệm lập trình thú vị!

Tags