Cloud Anchors-Entwicklerleitfaden für Android (Kotlin/Java)

Weitere Informationen zur Verwendung von Cloud-Ankern in Ihren eigenen Apps

Voraussetzungen

Machen Sie sich mit den grundlegenden AR-Konzepten und mit der Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.

Wenn Sie Cloud-Anker noch nicht kennen:

ARCore API aktivieren

Bevor Sie Cloud-Markierungen in Ihrer App verwenden können, müssen Sie zuerst die ARCore API in Ihrer App aktivieren.

Cloud Anchor-Funktionen in der Sitzungskonfiguration aktivieren

Nachdem Sie die Cloud Anchors-Funktion in Ihrer App aktiviert haben, müssen Sie die Cloud Anchors-Funktionen in der AR-Sitzungskonfiguration Ihrer App aktivieren, damit sie mit der ARCore API kommunizieren kann:

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 hosten

Das Hosting beginnt mit einem Aufruf von hostCloudAnchorAsync(). ARCore lädt visuelle Daten, Gerätepose und die Ankerpose in die ARCore API hoch. Die API verarbeitet diese Informationen dann, um eine 3D-Featurekarte zu erstellen, und gibt schließlich eine eindeutige Cloud Anchor-ID für den Anker zurück.

Sie können die Lebensdauer eines gehosteten Ankers auch mit der ARCore Cloud Anchor Management API verlängern.

Ihre App sollte die folgenden Schritte ausführen, um das Hosting eines Cloud-Anchors abzuschließen:

  1. Rufen Sie hostCloudAnchorAsync() auf.
  2. Warten Sie auf den Rückruf oder prüfen Sie den Status „Zukünftig“ kontinuierlich, bis der Vorgang abgeschlossen ist.
  3. Prüfen Sie den Ergebnisstatus, um festzustellen, ob der Vorgang erfolgreich war, oder interpretieren Sie den Fehlercode, wenn er fehlgeschlagen ist.
  4. Geben Sie die Cloud Anchor-ID des Ergebnisses für andere Clients frei und verwenden Sie sie, um den Cloud Anchor mit resolveCloudAnchorAsync() aufzulösen.

Kartierungsqualität von Featurepunkten prüfen

Session.FeatureMapQuality gibt die Qualität der Merkmals-/Markierungspunkte an, die ARCore in den letzten Sekunden aus einer bestimmten Kamerapose gesehen hat. Cloud-Anchors, die mit Funktionen höherer Qualität gehostet werden, werden im Allgemeinen genauer aufgelöst. Verwenden Sie Session.estimateFeatureMapQualityForHosting(), um eine Schätzung der Qualität der Feature-Map für eine bestimmte Kameraposition zu erhalten.

Wert Beschreibung
INSUFFICIENT Die Qualität der in den letzten Sekunden ermittelten Merkmalspunkte ist niedrig. Dieser Status weist darauf hin, dass ARCore wahrscheinlich mehr Schwierigkeiten hat, den Cloud-Anker zu finden. Ermutigen Sie den Nutzer, das Gerät so zu bewegen, dass die gewünschte Position des Cloud-Ankers, den er hosten möchte, aus verschiedenen Blickwinkeln betrachtet werden kann.
SUFFICIENT Die Qualität der in den letzten Sekunden anhand der Pose ermittelten Merkmals- und Positionsdaten ist wahrscheinlich ausreichend, damit ARCore einen Cloud-Anker erfolgreich auflösen kann. Die Genauigkeit der aufgelösten Pose wird jedoch wahrscheinlich reduziert. Bitten Sie den Nutzer, das Gerät so zu bewegen, dass die gewünschte Position des Cloud-Ankerpunkts, den er hosten möchte, aus verschiedenen Blickwinkeln betrachtet werden kann.
GOOD Die Qualität der in den letzten Sekunden ermittelten Funktionspunkte reicht wahrscheinlich aus, damit ein Cloud-Anker mit hoher Genauigkeit mit ARCore aufgelöst werden kann.

Zuvor gehosteten Anker auflösen

Rufen Sie resolveCloudAnchorAsync() auf, um einen gehosteten Cloud-Anchor aufzulösen. Die ARCore API vergleicht regelmäßig visuelle Merkmale aus der Szene mit der 3D-Merkmalkarte des Ankers, um die Position und Ausrichtung des Nutzers relativ zum Anker zu ermitteln. Wenn eine Übereinstimmung gefunden wird, gibt die API die Position des gehosteten Cloud-Ankers zurück.

Sie können Auflösungen für mehrere Cloud-Anchors nacheinander initiieren. Es können bis zu 40 Cloud Anchor-Vorgänge gleichzeitig ausgeführt werden.

Vorgang abbrechen oder Cloud-Anchor entfernen

Rufen Sie cancel() auf, um einen ausstehenden Cloud-Anchor-Vorgang abzubrechen. Rufen Sie detach() auf, um einen bereits aufgelösten Cloud-Anchor aus der App zu entfernen.

Ergebnisstatus eines Cloud Anchor-Vorgangs prüfen

Mit Anchor.CloudAnchorState können Sie den Ergebnisstatus des Hosting- oder Auflösungsvorgangs prüfen, einschließlich Fehler.

Wert Beschreibung
ERROR_CLOUD_ID_NOT_FOUND Die Auflösung ist fehlgeschlagen, da die ARCore API die angegebene Cloud Anchor-ID nicht finden konnte.
ERROR_HOSTING_DATASET_PROCESSING_FAILED Das Hosting ist fehlgeschlagen, weil der Server den Datensatz für den angegebenen Anker nicht verarbeiten konnte. Versuchen Sie es noch einmal, nachdem das Gerät mehr Daten aus der Umgebung erfasst hat.
ERROR_HOSTING_SERVICE_UNAVAILABLE Die ARCore API war nicht erreichbar. Hierfür können verschiedene Ursachen vorliegen. Möglicherweise befindet sich das Gerät im Flugmodus oder verfügt nicht über eine funktionierende Internetverbindung. Bei der an den Server gesendeten Anfrage ist möglicherweise eine Zeitüberschreitung ohne Antwort aufgetreten. Möglicherweise gibt es eine schlechte Netzwerkverbindung, DNS-Nichtverfügbarkeit, Firewallprobleme oder andere Faktoren, die die Verbindung des Geräts zur ARCore API beeinträchtigen können.
ERROR_INTERNAL Ein Hosting- oder Aufklärungsaufgabe für diesen Anchor wurde mit einem internen Fehler abgeschlossen. Die App sollte nicht versuchen, diesen Fehler zu beheben.
ERROR_NOT_AUTHORIZED Die von der Anwendung bereitgestellte Autorisierung ist ungültig. Weitere Informationen finden Sie unter Fehlerbehebung bei Problemen mit der Autorisierung der ARCore API.
ERROR_RESOLVING_SDK_VERSION_TOO_NEW Der Cloud-Anchor konnte nicht aufgelöst werden, da die SDK-Version, die zum Auflösen des Anchors verwendet wurde, neuer ist als die Version, die zum Hosten verwendet wurde, und nicht mit dieser kompatibel ist.
ERROR_RESOLVING_SDK_VERSION_TOO_OLD Der Cloud-Anchor konnte nicht aufgelöst werden, da die SDK-Version, die zum Auflösen des Anchors verwendet wurde, älter als die Version ist, die zum Hosten verwendet wurde, und nicht mit dieser kompatibel ist.
ERROR_RESOURCE_EXHAUSTED Die Anwendung hat das für das jeweilige Google Cloud-Projekt zugewiesene Anfragekontingent ausgeschöpft. Sie sollten in der Google Developers Console ein zusätzliches Kontingent für die ARCore API für Ihr Projekt anfordern.
SUCCESS Eine Hosting- oder Auflösungsaufgabe für diesen Anker wurde erfolgreich abgeschlossen.

API-Kontingente für Host- und Auflösungsanfragen

Für die ARCore API gelten die folgenden Kontingente für die Anfragebandbreite:

Kontingenttyp Maximum Dauer Gilt für
Anzahl der Anker Unbegrenzt Projekt
host-Anfragen verankern 30 Minute IP-Adresse und Projekt
Anfragen an Anchor bearbeiten 300 Minute IP-Adresse und Projekt

Best Practices für eine positive Nutzererfahrung

Bitten Sie die Nutzer, Folgendes zu tun, um eine gute Nutzererfahrung mit Ihrer App zu gewährleisten:

  • Warten Sie nach Beginn der Sitzung einige Sekunden, bevor Sie versuchen, einen Anker zu hosten, indem Sie beispielsweise ein Objekt platzieren. So hat das Tracking Zeit, sich zu stabilisieren.
  • Versuchen Sie bei der Auswahl eines Standorts, an dem der Anker platziert werden soll, einen Bereich mit optischen Merkmalen, die leicht voneinander zu unterscheiden sind. Die besten Ergebnisse erzielen Sie, wenn Sie keine reflektierenden Oberflächen oder Oberflächen ohne visuelle Merkmale wie weiße Wände verwenden.
  • Trainiert die Kamera auf den POI und bewege das Gerät um den POI, um die Umgebung aus verschiedenen Blickwinkeln zu kartieren. Dabei bleibt ungefähr die gleiche physische Entfernung erhalten. Dadurch werden mehr visuelle Daten erfasst und eine zuverlässigere Auflösung ermöglicht.

  • Achten Sie darauf, dass die Umgebung beim Hosten und Auflösen von Cloud-Anchors ausreichend beleuchtet ist.

Einstellungsrichtlinie

  • Apps, die mit dem ARCore SDK 1.12.0 oder höher erstellt wurden, unterliegen der Richtlinie zur Einstellung der Cloud Anchor API.
  • In Apps, die mit dem ARCore SDK 1.11.0 oder niedriger erstellt wurden, können keine Cloud-Anchors gehostet oder aufgelöst werden, da das SDK eine ältere, eingestellte ARCore API verwendet.

Weiteres Vorgehen