[Video Summary] Ch. 8.12 - LocationManager: Getting Device Location with SwiftUI (2024)
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
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:
- 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
.
- Cài đặt LocationManager:
- Import
MapKit
. - Khai báo class
LocationManager
kế thừaNSObject
và conform vớiCLLocationManagerDelegate
. - 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ểuCLLocation?
để lưu trữ vị trí.locationManager
: kiểuCLLocationManager
.
- Tạo initializer:
- Gọi
super.init()
. - Đặt
desiredAccuracy
củalocationManager
thànhkCLLocationAccuracyBest
. - Đặt
delegate
củalocationManager
thànhself
. - 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í.
- Gọi
- Import
- 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()
).
- Lấy vị trí mới nhất từ mảng
- 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ềndefault
: Chứa@unknown default
, để bắt các trường hợp có thể xảy ra trong tương lai.
- Tạo extension cho
- Sử dụng LocationManager trong ContentView:
- Khai báo biến
@State
locationManager
kiểuLocationManager
- 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.
- Khai báo biến
- 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ị!