Hướng dẫn dành cho nhà phát triển Cloud Anchors cho Android (Kotlin/Java)

Tìm hiểu cách sử dụng Mốc trên đám mây trong ứng dụng của riêng bạn.

Điều kiện tiên quyết

Hãy đảm bảo rằng bạn hiểu rõ các khái niệm cơ bản về thực tế tăng cường và cách định cấu hình một phiên ARCore trước khi tiếp tục.

Nếu bạn mới sử dụng tính năng Điểm neo trên đám mây:

Bật API ARCore

Trước khi sử dụng Điểm neo trên đám mây trong ứng dụng, trước tiên, bạn phải bật API ARCore trong ứng dụng.

Bật các chức năng Cloud Anchor định cấu hình phiên

Sau khi bật chức năng Cloud Anchors trong ứng dụng của bạn, hãy bật các chức năng của Cloud Anchors trong phần cấu hình phiên AR của ứng dụng để có thể giao tiếp với ARCore API:

Java

Config config = new Config(session);
config.setCloudAnchorMode(Config.CloudAnchorMode.ENABLED);
session.configure(config);

Kotlin

val config = Config(session)
config.cloudAnchorMode = Config.CloudAnchorMode.ENABLED
session.configure(config)

Lưu trữ neo trên đám mây

Quá trình lưu trữ bắt đầu bằng lệnh gọi đến hostCloudAnchorAsync(). ARCore sẽ tải dữ liệu hình ảnh, tư thế thiết bị và tư thế neo lên API ARCore. Sau đó, API sẽ xử lý thông tin này để tạo bản đồ đặc điểm 3D, cuối cùng trả về một mã nhận dạng duy nhất của neo trên đám mây cho neo đến thiết bị.

Bạn cũng có thể kéo dài thời gian của một quảng cáo cố định được lưu trữ bằng cách sử dụng API quản lý neo của ARCore Cloud.

Ứng dụng của bạn phải làm theo các bước sau để hoàn tất việc lưu trữ một Điểm neo trên đám mây:

  1. Gọi hostCloudAnchorAsync().
  2. Chờ lệnh gọi lại hoặc liên tục kiểm tra trạng thái Future cho đến khi hoàn tất.
  3. Kiểm tra trạng thái kết quả để xác định xem thao tác có thành công hay không hoặc diễn giải mã lỗi nếu thao tác không thành công.
  4. Chia sẻ mã nhận dạng Cloud Anchor kết quả với các ứng dụng khác và sử dụng mã nhận dạng đó để phân giải Cloud Anchor bằng resolveCloudAnchorAsync().

Kiểm tra chất lượng lập bản đồ của các điểm đối tượng

Session.FeatureMapQuality cho biết chất lượng của các điểm đặc trưng mà ARCore nhìn thấy trong vài giây trước đó từ một tư thế máy ảnh nhất định. Cloud Neo được lưu trữ bằng các tính năng có chất lượng cao hơn thường được phân giải chính xác hơn. Sử dụng Session.estimateFeatureMapQualityForHosting() để ước tính chất lượng bản đồ đặc điểm cho một tư thế máy ảnh nhất định.

Giá trị Mô tả
INSUFFICIENT Chất lượng của các điểm đặc trưng được xác định từ tư thế trong vài giây trước đó là thấp. Trạng thái này cho biết ARCore có thể gặp nhiều khó khăn hơn trong việc phân giải neo trên đám mây. Khuyến khích người dùng di chuyển thiết bị để có thể xem vị trí mong muốn của Điểm neo trên đám mây mà họ muốn lưu trữ từ nhiều góc độ.
SUFFICIENT Chất lượng của các điểm đối tượng xác định được từ tư thế trong vài giây trước có khả năng là đủ để ARCore giải quyết thành công Cloud Anchor, mặc dù độ chính xác của tư thế đã phân giải có thể sẽ bị giảm. Khuyến khích người dùng di chuyển thiết bị để có thể xem vị trí mong muốn của Điểm neo trên đám mây mà họ muốn lưu trữ từ nhiều góc độ.
GOOD Chất lượng của các điểm đặc trưng được xác định từ tư thế trong vài giây trước đó có thể đủ để ARCore phân giải thành công một Điểm neo trên đám mây với độ chính xác cao.

Giải quyết một liên kết được lưu trữ trước đó

Gọi resolveCloudAnchorAsync() để phân giải một Điểm neo trên đám mây được lưu trữ. API ARCore định kỳ so sánh các đặc điểm hình ảnh từ cảnh với bản đồ đặc điểm 3D của điểm neo để xác định chính xác vị trí và hướng của người dùng so với điểm neo. Khi tìm thấy kết quả trùng khớp, API sẽ trả về tư thế của Điểm neo trên đám mây được lưu trữ.

Bạn có thể bắt đầu phân giải cho nhiều Cloud Anchors theo trình tự. Có thể tồn tại tối đa 40 hoạt động Cloud Anchor đồng thời cùng một lúc.

Huỷ thao tác hoặc xoá một Điểm neo trên đám mây

Gọi cancel() để huỷ thao tác đang chờ xử lý của Cloud Anchor. Gọi detach() để xoá một Điểm neo trên đám mây đã được phân giải khỏi ứng dụng.

Kiểm tra trạng thái kết quả của thao tác liên kết trên đám mây

Sử dụng Anchor.CloudAnchorState để kiểm tra trạng thái kết quả của thao tác lưu trữ hoặc phân giải, bao gồm cả lỗi.

Giá trị Mô tả
ERROR_CLOUD_ID_NOT_FOUND Không thể phân giải vì API ARCore không tìm thấy mã neo trên đám mây đã cung cấp.
ERROR_HOSTING_DATASET_PROCESSING_FAILED Không lưu trữ được do máy chủ không thể xử lý thành công tập dữ liệu cho neo đã cho. Hãy thử lại sau khi thiết bị thu thập thêm dữ liệu từ môi trường.
ERROR_HOSTING_SERVICE_UNAVAILABLE Không truy cập được API ARCore. Lỗi này có thể xảy ra do một số lý do. Thiết bị có thể đang ở chế độ trên máy bay hoặc không có kết nối Internet. Yêu cầu được gửi đến máy chủ có thể đã hết thời gian chờ mà không có phản hồi. Có thể có kết nối mạng kém, DNS không hoạt động, sự cố tường lửa hoặc bất kỳ vấn đề nào khác có thể ảnh hưởng đến khả năng kết nối của thiết bị với API ARCore.
ERROR_INTERNAL Một tác vụ lưu trữ hoặc phân giải cho liên kết này đã hoàn tất với lỗi nội bộ. Ứng dụng không được tìm cách khôi phục từ lỗi này.
ERROR_NOT_AUTHORIZED Quyền mà ứng dụng cung cấp không hợp lệ. Hãy xem bài viết Khắc phục sự cố về việc uỷ quyền API ARCore.
ERROR_RESOLVING_SDK_VERSION_TOO_NEW Không thể phân giải neo trên đám mây vì phiên bản SDK dùng để phân giải neo mới hơn và không tương thích với phiên bản dùng để lưu trữ neo đó.
ERROR_RESOLVING_SDK_VERSION_TOO_OLD Không thể phân giải neo trên đám mây vì phiên bản SDK dùng để phân giải neo cũ hơn và không tương thích với phiên bản dùng để lưu trữ neo đó.
ERROR_RESOURCE_EXHAUSTED Ứng dụng đã dùng hết hạn mức yêu cầu được phân bổ cho dự án Google Cloud nhất định. Bạn nên yêu cầu thêm hạn mức cho API ARCore cho dự án của mình trong Google Developers Console.
SUCCESS Đã hoàn tất một tác vụ lưu trữ hoặc phân giải cho liên kết này.

Hạn mức API đối với các yêu cầu lưu trữ và giải quyết

API ARCore có các hạn mức sau đây cho băng thông yêu cầu:

Loại hạn mức Tối đa Thời lượng Áp dụng cho
Số lượng neo không giới hạn Không áp dụng dự án
Yêu cầu máy chủ cố định 30 phút Địa chỉ IP và dự án
Yêu cầu giải quyết liên kết cố định 300 phút Địa chỉ IP và dự án

Các phương pháp hay nhất để tạo trải nghiệm tốt cho người dùng

Hướng dẫn người dùng thực hiện những việc sau để đảm bảo trải nghiệm người dùng tốt trên ứng dụng của bạn:

  • Chờ vài giây sau khi phiên bắt đầu trước khi cố gắng lưu trữ một neo (bằng cách đặt một đối tượng, v.v.). Điều này giúp quá trình theo dõi có thời gian ổn định.
  • Khi chọn vị trí để lưu trữ điểm neo, hãy cố gắng tìm một khu vực có các đặc điểm hình ảnh dễ phân biệt với nhau. Để có kết quả tốt nhất, hãy tránh những bề mặt phản chiếu hoặc bề mặt thiếu đặc điểm hình ảnh, chẳng hạn như tường trắng trống.
  • Giữ máy ảnh tập trung vào tâm điểm quan tâm và di chuyển thiết bị xung quanh tâm điểm quan tâm để lập bản đồ môi trường từ nhiều góc độ, duy trì khoảng cách vật lý gần như giống nhau khi bạn di chuyển. Điều này sẽ giúp thu thập nhiều dữ liệu hình ảnh hơn và giúp độ phân giải mạnh mẽ hơn.

  • Đảm bảo có đủ ánh sáng trong môi trường thực tế trong khi lưu trữ và phân giải Điểm neo trên đám mây.

Chính sách về việc ngừng cung cấp

  • Chính sách về việc ngừng sử dụng Cloud Anchor API áp dụng cho các ứng dụng được tạo bằng ARCore SDK 1.12.0 trở lên.
  • Các ứng dụng được tạo bằng SDK 1.11.0 trở xuống của ARCore không thể lưu trữ hoặc phân giải Điểm neo trên đám mây do SDK sử dụng một API ARCore cũ, không còn được dùng nữa.

Bước tiếp theo