Địa điểm chia sẻ trên khách hàng QT

Làm thế nào để sử dụng nó?

Sử dụng nhỏ

Trong một cuộc trò chuyện, người dùng có thể nhấp vào biểu tượng vị trí để hiển thị một bản đồ. Nếu Location Services được bật trên thiết bị, vị trí của người dùng sẽ được hiển thị trên bản đồ, cùng với vị trí của tất cả các thành viên khác đang chia sẻ vị trí của họ (từ tất cả các cuộc trò chuyện của tài khoản đã chọn). Người dùng có thể chuyển đổi chia sẻ vị trí vào và tắt bằng cách nhấp vào nút chia sẻ vị trí. Theo mặc định, vị trí của người dùng được chia sẻ trong 15 phút, nhưng cài đặt này có thể được sửa đổi trong cài đặt của ứng dụng.

Khi người dùng chia sẻ vị trí của mình trong một cuộc trò chuyện, một biểu tượng vị trí màu đỏ sẽ xuất hiện trên biểu tượng trò chuyện. Nếu người dùng nhận được một vị trí từ thành viên khác, một biểu tượng vị trí màu cam sẽ hiển thị trên tất cả các cuộc trò chuyện mà thành viên đang có mặt.

Người dùng có thể tương tác với bản đồ bằng cách gần đây, phóng to, di chuyển và đóng nó. Bản đồ cũng có thể được gắn hoặc không gắn. Khi bản đồ không gắn, nó có thể được gắn lại nếu người dùng ở trong tài khoản đúng.

Sử dụng nâng cao

Chia sẻ nhiều

kịch bản

Người dùng đã chia sẻ vị trí với cuộc trò chuyện A và cuộc trò chuyện B.

Tính năng

Nếu người dùng chuyển sang cuộc trò chuyện C, bản đồ vẫn có thể nhìn thấy và người dùng có hai tùy chọn

  1. Nhấp vào nút chia sẻ vị trí để chia sẻ vị trí với các thành viên cuộc trò chuyện C.

  2. Nhấp vào nút chia sẻ vị trí cuối. Điều này sẽ đưa ra một pop-up cho phép người dùng tắt chia sẻ vị trí hoàn toàn hoặc chỉ ngừng chia sẻ vị trí của họ với các thành viên của cuộc trò chuyện C.

Chiếc cửa sổ đệm

Nếu cửa sổ không được gắn, người dùng sẽ không thể nhấp vào nút chia sẻ vị trí vì cửa sổ không còn kết nối với cuộc trò chuyện. Để bắt đầu chia sẻ vị trí với những người mới, người dùng phải nhấp lại cửa sổ. Lưu ý rằng việc gỡ bỏ cửa sổ không ảnh hưởng đến bất kỳ chia sẻ vị trí nào liên tục. Ngoài ra, nhấp vào nút chia sẻ vị trí cuối trong khi cửa sổ được gỡ bỏ sẽ dừng tất cả chia sẻ vị trí hiện tại và không có bật lên sẽ xuất hiện để cho phép người dùng chọn một cuộc trò chuyện cụ thể để ngừng chia sẻ.

Nhiều tài khoản

Mỗi tài khoản có bản đồ độc đáo của riêng mình. Nếu người dùng gỡ bản đồ trong khi trên tài khoản A, sau đó chuyển sang tài khoản B và gỡ bản đồ, hai bản đồ sẽ hiển thị. Các bản đồ cho tài khoản A và B hiển thị vị trí được chia sẻ với các tài khoản đó, tương ứng, và hoàn toàn tách biệt với nhau

Làm thế nào nó hoạt động?

Khởi đầu

Tính năng này được chia thành ba phần:

  1. Đưa vị trí của người ta

  2. Nhận một vị trí

  3. Khán giả

Để xác định vị trí, [Qt Positioning] (https://doc.qt.io/qt-6/qtpositioning-index.html) API được sử dụng. Một khi vị trí được xác định, nó được gửi như một tin nhắn trên DHT và được truyền đến khách hàng. vị trí nhận được sau đó được hiển thị bằng thư viện JavaScript [OpenLayers] (https://openlayers.org/).

Gửi một vị trí

Ngay khi mở bản đồ, lớp Positioning đảm bảo lấy lại vị trí hiện tại bằng cách sử dụng lớp QGeoPositionInfoSource của mô-đun QtPositioning.

  • Địa điểm địa phương thông qua tín hiệu localPositionReceived để người dùng có thể thấy vị trí của mình

  • Trên DHT để tất cả các cuộc trò chuyện trong danh sách positionShareConvIds_. Danh sách này chứa các chìa khóa của tất cả các cuộc trò chuyện mà người dùng muốn chia sẻ vị trí của họ với. Từ khóa này, các URI của tất cả các đối tác được lấy và một thông điệp vị trí được gửi đến mỗi đối tác.

Các định dạng JSON của một vị trí là như sau:

  • Tiêu thức (tin nhắn vị trí hoặc dừng)

  • Độ vĩ độ

  • Độ dài

  • Thời gian (không được sử dụng bởi QtClient)

Ví dụ về dữ liệu: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Position\"}

Khi gửi vị trí cho con quái vật, URI của tác giả cũng được truyền.

Khi người dùng ngừng chia sẻ vị trí của mình với một cuộc trò chuyện, ID của cuộc trò chuyện chỉ đơn giản là được xóa khỏi danh sách positionShareConvIds_.

Nhận một vị trí

Khi một vị trí được nhận, nó kích hoạt khe "onPositionReceived() " dù đó là một vị trí địa phương từ mô-đun QtPositioning hoặc một vị trí từ một liên lạc khác.

  • Thêm (URI không có trong danh sách)

  • Được cập nhật (URI đã có mặt trong danh sách)

  • Deleted (type = "Stop")

Vị trí được lưu trữ trong danh sách dưới dạng một đối tượng kiểu positionObject.

Khán giả

Khi một vị trí được nhận (slot onPositionReceived() kích hoạt), vị trí được truyền đến Qml, mà sau đó gửi thông tin đến thư viện JavaScript [https://openlayers.org/).