瞭解如何在自己的應用程式中使用 Cloud Anchors。
必要條件
請務必瞭解基本 AR 概念 以及如何在繼續操作前設定 ARCore 工作階段。
如果您是 Cloud Anchors 新手:
- 請務必瞭解錨點和 Cloud Anchors 的運作方式。
- 詳閱 Cloud Anchors 快速入門導覽課程,瞭解系統需求、設定和安裝操作說明。
啟用 ARCore API
您必須先在應用程式中啟用 ARCore API,才能在應用程式中使用 Cloud Anchors。
在工作階段設定中啟用 Cloud Anchor 功能
在應用程式中啟用 Cloud Anchors 功能後,請在應用程式的 AR 工作階段設定中啟用 Cloud Anchors 功能,以便與 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)
託管 Cloud Anchor
開始時,只要呼叫 hostCloudAnchorAsync()
即可。ARCore 會將視覺資料、裝置姿勢和錨點姿勢上傳至 ARCore API。接著,API 會處理這項資訊來建構 3D 功能對應,最終將錨定標記的專屬 Cloud Anchor ID 傳回裝置。
您也可以使用 ARCore Cloud Anchor Management API 延長代管錨點的生命週期。
應用程式應按照下列步驟完成 Cloud Anchor 的託管:
- 呼叫
hostCloudAnchorAsync()
。 - 等待回呼,或持續檢查 Future 狀態,直到完成為止。
- 檢查結果狀態,判斷作業是否成功,或在作業失敗時解讀錯誤代碼。
- 將結果 Cloud Anchor ID 提供給其他用戶端,並使用該 ID 透過
resolveCloudAnchorAsync()
解析 Cloud Anchor。
檢查地圖資料點的對應品質
Session.FeatureMapQuality
表示 ARCore 在指定相機姿勢之前幾秒前看到的特徵點品質。使用較高品質功能代管的雲端錨點,通常能更準確地解析。使用 Session.estimateFeatureMapQualityForHosting()
取得特定相機姿勢的地圖項目地圖品質估計值。
值 | 說明 |
---|---|
INSUFFICIENT |
在前幾秒內從姿勢辨識出來的特徵點品質不佳。這個狀態表示 ARCore 可能會更難解析 Cloud Anchor。鼓勵使用者移動裝置,以便從不同角度查看要放置的 Cloud Anchor 所需位置。 |
SUFFICIENT |
在前幾秒內從姿勢辨識出的特色點品質,可能已足以讓 ARCore 成功解析雲端錨點,但解析姿勢的準確度可能會降低。鼓勵使用者移動裝置,以便從不同角度查看他們想要代管的 Cloud Anchor 所需的位置。 |
GOOD |
在前幾秒內從姿勢辨識出的特徵點品質,可能已足以讓 ARCore 成功解析雲端錨點,並達到高精確度。 |
解決先前代管的錨定廣告
呼叫 resolveCloudAnchorAsync()
解析代管的 Cloud Anchor。ARCore API 會定期將場景中的視覺特徵與錨點的 3D 特徵地圖進行比對,以便精確定位使用者相對於錨點的位置和方向。找到相符項目後,API 會傳回代管 Cloud Anchor 的姿勢。
您可以依序啟動多個 Cloud Anchor 的解析作業。最多可同時執行 40 個 Cloud Anchor 作業。
取消作業或移除 Cloud Anchor
呼叫 cancel()
可取消待處理的 Cloud Anchor 作業。呼叫 detach()
,從應用程式中移除已解決的 Cloud Anchor。
檢查 Cloud Anchor 作業的結果狀態
使用 Anchor.CloudAnchorState 檢查主機或解析作業的結果狀態,包括錯誤。
值 | 說明 |
---|---|
ERROR_CLOUD_ID_NOT_FOUND |
ARCore API 找不到提供的 Cloud Anchor ID,因此無法解析。 |
ERROR_HOSTING_DATASET_PROCESSING_FAILED |
主機服務失敗,因為伺服器無法成功處理指定錨點的資料集。請在裝置從環境收集更多資料後再試一次。 |
ERROR_HOSTING_SERVICE_UNAVAILABLE |
無法連線至 ARCore API。導致這個問題的原因可能不只一個。裝置可能處於飛航模式,或未連上網際網路。傳送至伺服器的要求可能已逾時,且沒有回應。可能是因為網路連線不穩定、DNS 無法使用、防火牆問題,或是其他因素可能會影響裝置連線至 ARCore API 的能力。 |
ERROR_INTERNAL |
這個錨點的代管或解析工作已完成,但發生內部錯誤。應用程式不應嘗試從此錯誤復原。 |
ERROR_NOT_AUTHORIZED |
應用程式提供的授權無效。請參閱排解 ARCore API 授權問題。 |
ERROR_RESOLVING_SDK_VERSION_TOO_NEW |
無法解析 Cloud Anchor,因為用於解析錨點的 SDK 版本較新,且與用於代管錨點的版本不相容。 |
ERROR_RESOLVING_SDK_VERSION_TOO_OLD |
無法解析 Cloud Anchor,因為用來解析錨點的 SDK 版本較舊,且與用來代管錨點的版本不相容。 |
ERROR_RESOURCE_EXHAUSTED |
應用程式已用盡指定 Google Cloud 專案的要求配額。您應透過 Google Developers Console 為專案要求額外的 ARCore API 配額。 |
SUCCESS |
此錨點的代管或解析工作已順利完成。 |
主機和解析要求的 API 配額
ARCore API 的要求頻寬配額如下:
配額類型 | 上限 | 持續時間 | 套用對象 |
---|---|---|---|
錨點數量 | 無限制 | 不適用 | 專案 |
錨點主機要求 | 30 | 分鐘 | IP 位址與專案 |
錨定解析要求 | 300 | 分鐘 | IP 位址與專案 |
打造良好使用者體驗的最佳做法
請引導使用者執行下列操作,確保應用程式提供良好的使用者體驗:
- 工作階段開始後,請稍候幾秒鐘,然後再嘗試代管錨點 (例如放置物件等)。這可讓追蹤功能穩定下來。
- 選擇要放置錨點的位置時,請盡量選擇視覺特徵容易區分的區域。為獲得最佳成效,請避免使用會反光的表面,或缺乏視覺特徵的表面,例如空白的白牆。
持續訓練相機以搜尋你感興趣的位置,並沿著裝置四處移動 這個搜尋中心可從不同角度繪製環境地圖,且維持大致相同的實際距離。這樣有助於擷取更多視覺化資料,進而提升解決方法。
請務必在主辦和解析雲端錨點時,確保實際環境有足夠的光線。
廢止政策
- 使用 ARCore SDK 1.12.0 以上版本建構的應用程式適用 Cloud Anchor API 廢止政策。
- 使用 ARCore SDK 1.11.0 以下版本建構的應用程式無法代管或解析 Cloud Anchors,因為 SDK 使用了已淘汰的舊版 ARCore API。
後續步驟
- 使用 ARCore Cloud Anchors with persistent Cloud Anchors codelab 建立 Cloud Anchors 應用程式。
- 參考 Cloud Anchors 快速入門導覽課程中的兩個範例應用程式,逐步瞭解託管和解決 Cloud Anchors 的方式。
- 使用 Cloud Anchors Management API,管理 ARCore 應用程式之外的 Cloud Anchors。
- 如要進一步瞭解如何在應用程式中使用 ARCore,請參閱 Android 參考說明文件。