1. Übersicht
ARCore ist eine Plattform zum Erstellen von Augmented-Reality-Apps auf Mobilgeräten. Mit der Cloud Anchors API können Sie AR-Apps erstellen, die einen gemeinsamen Bezugsrahmen verwenden. So können mehrere Nutzer virtuelle Inhalte am selben realen Ort platzieren.
In diesem Codelab wird die Cloud Anchors API beschrieben. Sie nehmen eine vorhandene ARCore-App, ändern sie so, dass Cloud Anchors verwendet werden, und erstellen eine gemeinsame AR-Erfahrung.
ARCore-Anker und persistente Cloud-Anker
Ein grundlegendes Konzept in ARCore ist das des Ankers, der eine feste Position in der realen Welt beschreibt. ARCore passt den Wert der Position eines Ankers automatisch an, wenn sich das Motion Tracking im Laufe der Zeit verbessert.
Cloud Anchors sind Anchors, die in der Cloud gehostet werden. Sie können von mehreren Nutzern aufgelöst werden, um einen gemeinsamen Bezugsrahmen für Nutzer und ihre Geräte zu schaffen.
Anker-Hosting
Wenn ein Anker gehostet wird, geschieht Folgendes:
- Die Position des Ankers in Bezug auf die Welt wird in die Cloud hochgeladen und eine Cloud-Anker-ID wird abgerufen.
Die Cloud-Anker-ID ist ein String, der an alle gesendet werden muss, die diesen Anker auflösen möchten. - Ein Dataset mit visuellen Daten für den Anker wird auf Google-Server hochgeladen.
Dieses Dataset enthält visuelle Daten, die das Gerät in letzter Zeit erfasst hat. Wenn Sie das Gerät vor dem Hosting etwas bewegen, um den Bereich um den Ankerpunkt aus verschiedenen Blickwinkeln zu erfassen, wird die Lokalisierung verbessert.
Cloud Anchor-IDs übertragen
In diesem Codelab übertragen Sie Cloud Anchor-IDs mit Firebase. Sie können Cloud Anchor-IDs auch auf andere Weise weitergeben.
Anker auflösen
Mit der Cloud Anchor API können Sie einen Anker anhand seiner Cloud Anchor-ID auflösen. Dadurch wird ein neuer Anker am selben physischen Standort wie der ursprüngliche gehostete Anker erstellt. Bei der Auflösung muss das Gerät auf dieselbe physische Umgebung wie der ursprünglich gehostete Anker ausgerichtet sein.
Persistente Cloud Anchors
Vor Version 1.20 konnten Cloud Anchors nur 24 Stunden nach dem Hosten aufgelöst werden. Mit der Persistent Cloud Anchors API können Sie einen Cloud Anchor erstellen, der nach dem Erstellen 1 bis 365 Tage lang aufgelöst werden kann.
Umfang
In diesem Codelab bauen Sie auf einer vorhandenen ARCore-App auf. Am Ende des Codelabs wird Ihre App Folgendes können:
- Dauerhafte Cloud Anchors hosten und Cloud Anchor-IDs abrufen können.
- Cloud Anchor-IDs auf dem Gerät speichern, um sie mit Android
SharedPreferenceseinfach abzurufen. - Mit gespeicherten Cloud Anchor-IDs können Sie zuvor gehostete Anchors auflösen. So können wir in diesem Codelab ganz einfach eine Umgebung mit mehreren Nutzern auf einem einzelnen Gerät simulieren.
- Cloud Anchor-IDs mit einem anderen Gerät teilen, auf dem dieselbe App ausgeführt wird, damit mehrere Nutzer die Android-Statue an derselben Position sehen.
An der Position des Cloud Anchors wird eine Android-Statue gerendert:

Lerninhalte
- Anker mit dem ARCore SDK hosten und eine Cloud Anchor-ID abrufen
- Cloud Anchor-IDs zum Auflösen von Anchors verwenden
- Cloud Anchor-IDs zwischen verschiedenen AR-Sitzungen auf demselben oder auf verschiedenen Geräten speichern und freigeben
Voraussetzungen
- Ein unterstütztes ARCore-Gerät, das über ein USB-Kabel mit Ihrem Entwicklungscomputer verbunden ist.
- Google Play-Dienste für AR 1.22 oder höher.
- Ein Entwicklercomputer mit Android Studio (Version 3.0 oder höher).
2. Entwicklungsumgebung einrichten
Entwicklungscomputer einrichten
Verbinden Sie Ihr ARCore-Gerät über das USB-Kabel mit dem Computer. Achten Sie darauf, dass Ihr Gerät USB-Debugging zulässt.
Öffnen Sie ein Terminal und führen Sie adb devices aus, wie unten gezeigt:
adb devices List of devices attached <DEVICE_SERIAL_NUMBER> device
Die <DEVICE_SERIAL_NUMBER> ist ein String, der für Ihr Gerät eindeutig ist. Achten Sie darauf, dass genau ein Gerät angezeigt wird, bevor Sie fortfahren.
Code herunterladen und installieren
Sie können das Repository entweder klonen:
git clone https://github.com/googlecodelabs/arcore-cloud-anchors.git
Oder laden Sie eine ZIP-Datei herunter und extrahieren Sie sie:
Starten Sie Android Studio. Klicken Sie auf Open an existing Android Studio project (Vorhandenes Android Studio-Projekt öffnen). Rufen Sie dann das Verzeichnis auf, in das Sie die oben heruntergeladene ZIP-Datei extrahiert haben, und doppelklicken Sie auf das Verzeichnis arcore-cloud-anchors.
Dies ist ein einzelnes Gradle-Projekt mit mehreren Modulen. Wenn der Bereich „Projekt“ oben links in Android Studio noch nicht angezeigt wird, klicken Sie im Drop-down-Menü auf Projekte. Das Ergebnis sollte so aussehen:

Sie arbeiten hauptsächlich im Modul work. Andere Module enthalten ein helpers-Modul mit einer Reihe nützlicher Wrapper-Klassen, die Sie verwenden werden. Außerdem gibt es vollständige Lösungen für jeden Teil des Codelabs. Mit Ausnahme des Moduls helpers ist jedes Modul eine App, die erstellt werden kann.
Wenn ein Dialogfeld angezeigt wird, in dem Sie aufgefordert werden, das Android-Gradle-Plug-in zu aktualisieren, klicken Sie auf Don't remind me again for this project (Mich für dieses Projekt nicht noch einmal daran erinnern):

Klicken Sie auf Ausführen > Ausführen… > „work“. Im angezeigten Dialogfeld Bereitstellungsziel auswählen sollte Ihr Gerät unter Verbundene Geräte aufgeführt sein. Wählen Sie Ihr Gerät aus und klicken Sie auf OK. Android Studio erstellt die erste App und führt sie auf Ihrem Gerät aus.
Wenn Sie die App zum ersten Mal ausführen, wird die Berechtigung CAMERA angefordert. Tippe auf ZULASSEN, um fortzufahren.

Informationen zur Verwendung der App
- Bewegen Sie das Gerät, damit die App eine Ebene finden kann. Wenn eine Ebene gefunden wird, wird sie als gepunktete Oberfläche dargestellt.
- Tippe auf eine beliebige Stelle auf der Ebene, um einen Anker zu platzieren. An der Stelle, an der der Anker platziert wurde, wird eine Android-Figur gezeichnet. Mit dieser App können Sie jeweils nur einen Anker platzieren.
- Bewegen Sie das Gerät. Die Figur sollte an derselben Stelle bleiben, auch wenn sich das Gerät bewegt.
- Drücke die CLEAR-Taste, um den Anker zu entfernen. So können Sie einen weiteren Anker setzen.

Derzeit wird in dieser App nur die von ARCore bereitgestellte Bewegungserkennung verwendet, um einen Anker in einem einzelnen Lauf der App zu verfolgen. Wenn Sie die App beenden, schließen und neu starten, gehen der zuvor platzierte Anker und alle zugehörigen Informationen, einschließlich seiner Position, verloren.
In den nächsten Abschnitten werden Sie diese App weiterentwickeln, um zu sehen, wie Anker über AR-Sitzungen hinweg freigegeben werden können.
3. Anker hosten
In diesem Abschnitt ändern Sie das work-Projekt, um einen Anker zu hosten. Bevor Sie Code schreiben, müssen Sie einige Änderungen an der Konfiguration der App vornehmen.
INTERNET-Berechtigungen deklarieren
Da für Cloud Anchors die Kommunikation mit dem ARCore Cloud Anchor API-Dienst erforderlich ist, muss Ihre App die Berechtigung für den Internetzugriff haben.
Fügen Sie in der Datei AndroidManifest.xml die folgende Zeile direkt unter der Berechtigungserklärung android.permission.CAMERA hinzu:
<!-- Find this line... -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- Add the line right below -->
<uses-permission android:name="android.permission.INTERNET"/>
ARCore API aktivieren
- Rufen Sie die Dienstseite ARCore API auf.
- Wählen Sie in der Projektliste ein Projekt aus oder erstellen Sie ein neues.
- Klicken Sie auf Aktivieren.
Schlüssellose Authentifizierung einrichten
Wenn Sie persistente Cloud Anchors verwenden möchten, müssen Sie sich mit der ARCore API über die schlüssellose Authentifizierung authentifizieren.
- Rufen Sie die Google Cloud Platform Console auf.
- Wählen Sie aus der Projektliste ein Projekt aus.
- Wenn die Seite „APIs & Dienste“ noch nicht geöffnet ist, öffnen Sie das Menü auf der linken Seite der Console und wählen Sie APIs & Dienste aus.
- Klicken Sie links auf Anmeldedaten.
- Klicken Sie auf Anmeldedaten erstellen und wählen Sie OAuth-Client-ID aus.
- Geben Sie die folgenden Werte ein:
- App-Typ: Android
- Paketname:
com.google.ar.core.codelab.cloudanchor
- Rufen Sie den Fingerabdruck Ihres Debug-Signaturzertifikats ab:
- Öffnen Sie in Ihrem Android Studio-Projekt den Gradle-Toolbereich.
- Führen Sie in cloud-anchors > work > Tasks > android die Aufgabe signingReport aus.
- Kopieren Sie den SHA‑1-Fingerabdruck in das Feld SHA‑1 certificate fingerprint (SHA‑1-Zertifikatfingerabdruck) in Google Cloud.
ARCore konfigurieren
Als Nächstes ändern Sie die App so, dass ein Anker bei einem Tippen des Nutzers statt eines regulären Ankers gehostet wird. Dazu müssen Sie die ARCore-Sitzung so konfigurieren, dass Cloud Anchors aktiviert werden.
Fügen Sie in der Datei CloudAnchorFragment.java den folgenden Code hinzu:
// Find this line...
session = new Session(requireActivity());
// Add these lines right below:
// Configure the session.
Config config = new Config(session);
config.setCloudAnchorMode(CloudAnchorMode.ENABLED);
session.configure(config);
Erstellen und führen Sie Ihre App aus, bevor Sie fortfahren. Achten Sie darauf, dass Sie nur das Modul work erstellen. Ihre App sollte erfolgreich erstellt werden und wie zuvor funktionieren.
Anker hosten
Jetzt ist es an der Zeit, einen Anker zu hosten, der in die ARCore API hochgeladen wird.
Fügen Sie der Klasse CloudAnchorFragment das folgende neue Feld hinzu:
// Find this line...
private Anchor currentAnchor = null;
// Add these lines right below.
@Nullable
private Future future = null;
Denken Sie daran, einen Import für com.google.ar.core.Future hinzuzufügen.
Ändern Sie die Methode onClearButtonPressed so:
private void onClearButtonPressed() {
// Clear the anchor from the scene.
if (currentAnchor != null) {
currentAnchor.detach();
currentAnchor = null;
}
// The next part is the new addition.
// Cancel any ongoing asynchronous operations.
if (future != null) {
future.cancel();
future = null;
}
}
Fügen Sie als Nächstes die folgende Methode in Ihre CloudAnchorFragment-Klasse ein:
private void onHostComplete(String cloudAnchorId, CloudAnchorState cloudState) {
if (cloudState == CloudAnchorState.SUCCESS) {
messageSnackbarHelper.showMessage(getActivity(), "Cloud Anchor Hosted. ID: " + cloudAnchorId);
} else {
messageSnackbarHelper.showMessage(getActivity(), "Error while hosting: " + cloudState.toString());
}
}
Suchen Sie in der Klasse CloudAnchorFragment nach der Methode handleTap und fügen Sie diese Zeilen hinzu:
// Find this line...
currentAnchor = hit.createAnchor();
// Add these lines right below:
messageSnackbarHelper.showMessage(getActivity(), "Now hosting anchor...");
future = session.hostCloudAnchorAsync(currentAnchor, 300, this::onHostComplete);
Führen Sie Ihre App noch einmal in Android Studio aus. Wenn Sie einen Anker platzieren, sollte die Meldung Now hosting anchor... (Anker wird jetzt gehostet) angezeigt werden. Wenn das Hosting erfolgreich abgeschlossen wurde, sollte eine weitere Meldung angezeigt werden. Wenn Sie die Meldung Fehler beim Hosten des Ankers : ERROR_NOT_AUTHORIZED sehen, prüfen Sie, ob Ihr OAuth-Client richtig konfiguriert ist.

Jeder, der die Anker-ID kennt und sich im selben physischen Raum wie der Anker befindet, kann mit der Anker-ID einen Anker in genau derselben Position und Ausrichtung relativ zur Umgebung erstellen.
Die Anker-ID ist jedoch lang und kann von anderen Nutzern nicht einfach manuell eingegeben werden. In den folgenden Abschnitten speichern Sie Cloud Anchor-IDs so, dass sie leicht abgerufen werden können, um das Auflösen von Ankern auf demselben oder einem anderen Gerät zu ermöglichen.
4. Store-IDs und Resolve-Anker
In diesem Teil weisen Sie den langen Cloud Anchor-IDs kurze Codes zu, damit andere Nutzer sie leichter manuell eingeben können. Sie verwenden die Shared Preferences API, um die Cloud Anchor-IDs als Werte in einer Schlüssel/Wert-Tabelle zu speichern. Diese Tabelle bleibt auch dann erhalten, wenn die App beendet und neu gestartet wird.
Eine Hilfsklasse mit dem Namen StorageManager ist bereits für Sie verfügbar. Dies ist ein Wrapper für die SharedPreferences API, der Methoden zum Generieren neuer eindeutiger Shortcodes und zum Lesen/Schreiben von Cloud Anchor-IDs enthält.
StorageManager verwenden
Ändern Sie CloudAnchorFragment so, dass StorageManager zum Speichern von Cloud Anchor-IDs mit Kurzcodes verwendet wird, damit sie einfach abgerufen werden können.
Erstellen Sie das folgende neue Feld in CloudAnchorFragment:
// Find this line...
private TapHelper tapHelper;
// And add the storageManager.
private final StorageManager storageManager = new StorageManager();
Ändern Sie dann die onHostComplete-Methode:
private void onHostComplete(String cloudAnchorId, CloudAnchorState cloudState) {
if (cloudState == CloudAnchorState.SUCCESS) {
int shortCode = storageManager.nextShortCode(getActivity());
storageManager.storeUsingShortCode(getActivity(), shortCode, anchor.getCloudAnchorId());
messageSnackbarHelper.showMessage(
getActivity(), "Cloud Anchor Hosted. Short code: " + shortCode);
} else {
messageSnackbarHelper.showMessage(getActivity(), "Error while hosting: " + cloudState.toString());
}
}
Erstellen Sie die App nun in Android Studio und führen Sie sie aus. Wenn Sie einen Anker erstellen und hosten, sollten anstelle der langen Cloud Anchor-IDs Shortcodes angezeigt werden.
Unmittelbar nach dem Setzen eines Ankers | Nach einer Weile |
|
|
Die von StorageManager generierten Shortcodes werden derzeit immer in aufsteigender Reihenfolge zugewiesen.
Als Nächstes fügen Sie einige UI-Elemente hinzu, mit denen Sie Shortcodes eingeben und die Anker neu erstellen können.
Schaltfläche „Lösen“ hinzufügen
Sie fügen neben der Schaltfläche CLEAR eine weitere Schaltfläche hinzu. Das ist die Schaltfläche LÖSEN. Wenn der Nutzer auf die Schaltfläche RESOLVE (AUFLÖSEN) klickt, wird ein Dialogfeld geöffnet, in dem er aufgefordert wird, einen Shortcode einzugeben. Der Shortcode wird verwendet, um die Cloud Anchor-ID aus StorageManager abzurufen und den Anker aufzulösen.
Wenn Sie die Schaltfläche hinzufügen möchten, müssen Sie die Datei res/layout/cloud_anchor_fragment.xml ändern. Doppelklicken Sie in Android Studio auf die Datei und klicken Sie dann unten auf den Tab „Text“, um das Roh-XML anzuzeigen. Nehmen Sie die folgenden Änderungen vor:
<!-- Find this element. -->
<Button
android:text="CLEAR"
android:id="@+id/clear_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- Add this element right below. -->
<Button
android:text="RESOLVE"
android:id="@+id/resolve_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
Fügen Sie nun ein neues Feld zu CloudAnchorFragment hinzu:
private Button resolveButton;
So fügen Sie eine neue Methode hinzu:
private void onResolveButtonPressed() {
ResolveDialogFragment dialog = new ResolveDialogFragment();
dialog.show(getFragmentMagetActivity().getSupportFragmentManagernager(), "Resolve");
}
Initialisieren Sie resolveButton in der Methode onCreateView so:
// Find these lines...
Button clearButton = rootView.findViewById(R.id.clear_button);
clearButton.setOnClickListener(v -> onClearButtonPressed());
// Add these lines right below.
resolveButton = rootView.findViewById(R.id.resolve_button);
resolveButton.setOnClickListener(v -> onResolveButtonPressed());
Suchen Sie die Methode handleTap und ändern Sie sie:
private void handleTap(Frame frame, Camera camera) {
// ...
// Find this line.
currentAnchor = hit.createAnchor();
// Add this line right below.
getActivity().runOnUiThread(() -> resolveButton.setEnabled(false));
}
Fügen Sie der Methode onClearButtonPressed eine Zeile hinzu:
private void onClearButtonPressed() {
// Clear the anchor from the scene.
if (currentAnchor != null) {
currentAnchor.detach();
currentAnchor = null;
}
// Cancel any ongoing async operations.
if (future != null) {
future.cancel();
future = null;
}
// The next line is the new addition.
resolveButton.setEnabled(true);
}
Erstellen und Ausführen der App in Android Studio Die Schaltfläche BEHEBEN sollte neben der Schaltfläche LÖSCHEN angezeigt werden. Wenn Sie auf die Schaltfläche RESOLVE (Beheben) klicken, sollte ein Dialogfeld wie unten dargestellt eingeblendet werden.
Die Schaltfläche LÖSEN ist jetzt sichtbar. | Wenn Sie auf die Schaltfläche klicken, wird dieses Dialogfeld angezeigt. |
|
|
Wenn Sie auf die Ebene tippen und einen Anker hosten, sollte die Schaltfläche RESOLVE (Auflösen) deaktiviert werden. Wenn Sie jedoch auf die Schaltfläche CLEAR (Löschen) tippen, sollte sie wieder aktiviert werden. Das ist so vorgesehen, damit jeweils nur ein Anker in der Szene vorhanden ist.
Das Dialogfeld „Anker auflösen“ hat keine Funktion, aber das werden Sie jetzt ändern.
Anker auflösen
Fügen Sie der Klasse CloudAnchorFragment die folgenden Methoden hinzu:
private void onShortCodeEntered(int shortCode) {
String cloudAnchorId = storageManager.getCloudAnchorId(getActivity(), shortCode);
if (cloudAnchorId == null || cloudAnchorId.isEmpty()) {
messageSnackbarHelper.showMessage(
getActivity(),
"A Cloud Anchor ID for the short code " + shortCode + " was not found.");
return;
}
resolveButton.setEnabled(false);
future = session.resolveCloudAnchorAsync(
cloudAnchorId, (anchor, cloudState) -> onResolveComplete(anchor, cloudState, shortCode));
}
private void onResolveComplete(Anchor anchor, CloudAnchorState cloudState, int shortCode) {
if (cloudState == CloudAnchorState.SUCCESS) {
messageSnackbarHelper.showMessage(getActivity(), "Cloud Anchor Resolved. Short code: " + shortCode);
currentAnchor = anchor;
} else {
messageSnackbarHelper.showMessage(
getActivity(),
"Error while resolving anchor with short code "
+ shortCode
+ ". Error: "
+ cloudState.toString());
resolveButton.setEnabled(true);
}
}
Ändern Sie dann die onResolveButtonPressed-Methode:
private void onResolveButtonPressed() {
ResolveDialogFragment dialog = ResolveDialogFragment.createWithOkListener(
this::onShortCodeEntered);
dialog.show(getActivity().getSupportFragmentManager(), "Resolve");
}
Erstellen und führen Sie die App in Android Studio aus und führen Sie die folgenden Schritte aus:
- Erstellen Sie einen Anker auf einer Ebene und warten Sie, bis der Anker gehostet wird.
Shortcode merken - Drücke die Taste CLEAR, um den Anker zu löschen.
- Klicken Sie auf die Schaltfläche LÖSEN. Geben Sie den Kurzcode aus Schritt 1 ein.
- Sie sollten einen Anker an derselben Position relativ zur Umgebung sehen, an der Sie ihn ursprünglich platziert haben.
- Beende die App und schließe sie vollständig. Öffne sie dann wieder.
- Wiederholen Sie die Schritte 3 und 4. Sie sollten einen neuen Anker sehen, wieder an derselben Position.
Kurzcode eingeben | Anker wurde erfolgreich aufgelöst |
|
|
5. Dateien zwischen Geräten teilen
Sie haben gesehen, wie Sie die Cloud Anchor-ID eines Ankers im lokalen Speicher Ihres Geräts speichern und später abrufen können, um denselben Anker neu zu erstellen. Das volle Potenzial von Cloud Anchors wird jedoch erst ausgeschöpft, wenn Sie die Cloud Anchor-IDs zwischen verschiedenen Geräten teilen können.
Wie Ihre App Cloud Anchor-IDs freigibt, liegt bei Ihnen. Sie können den String auf beliebige Weise von einem Gerät auf ein anderes übertragen. In diesem Codelab verwenden Sie die Firebase Realtime Database, um Cloud Anchor-IDs zwischen Instanzen der App zu übertragen.
Firebase einrichten
Sie müssen eine Firebase Realtime Database mit Ihrem Google-Konto einrichten, damit sie mit dieser App verwendet werden kann. Das ist mit dem Firebase Assistant in Android Studio ganz einfach.
Klicken Sie in Android Studio auf Tools > Firebase. Klicken Sie im eingeblendeten Assistentenbereich auf Realtime Database und dann auf Daten speichern und abrufen:

Klicken Sie auf die Schaltfläche Connect to Firebase, um Ihr Android Studio-Projekt mit einem neuen oder vorhandenen Firebase-Projekt zu verknüpfen.

Sie werden aufgefordert, ein Modul auszuwählen. Wählen Sie das Modul work aus:

Das Dialogfeld „Connect wird gestartet“ wird angezeigt. Das kann eine Weile dauern.

Melden Sie sich mit Ihrem Google-Konto an und durchlaufen Sie den Web-Workflow zum Erstellen eines Firebase-Projekts für Ihre App, bis Sie zu Android Studio zurückkehren.
Klicken Sie als Nächstes im Bereich „Assistant“ auf Realtime Database zur App hinzufügen:

Wählen Sie im Pop-up-Dialogfeld im Drop-down-Menü Target module (Zielmodul) die Option work (Arbeit) aus und klicken Sie auf Accept Changes (Änderungen übernehmen).

Dadurch geschieht Folgendes:
- Fügen Sie Ihrem Verzeichnis
workeine Dateigoogle-services.jsonhinzu. - Fügen Sie Ihrer
build.gradle-Datei im selben Verzeichnis einige Zeilen hinzu. - Erstellen Sie die App und führen Sie sie aus. Möglicherweise wird ein Auflösungsfehler bezüglich der Firebase-Datenbankversionsnummer angezeigt.
Suchen Sie in der Datei build.gradle des Moduls work nach der folgenden Zeile und entfernen Sie sie (xxxx ist ein Platzhalter für die aktuelle Versionsnummer):
dependencies {
...
implementation 'com.google.firebase:firebase-database:xxxx'
Sehen Sie sich als Nächstes die Anleitung an, die auf der Seite Regeln für öffentlichen Zugriff konfigurieren verlinkt ist. Folgen Sie ihr aber noch nicht. Konfigurieren Sie Ihre Firebase Realtime Database so, dass sie weltweit beschreibbar ist. Das vereinfacht das Testen in diesem Codelab:

Wählen Sie in der Firebase Console das Projekt aus, mit dem Sie Ihr Android Studio-Projekt verknüpft haben, und klicken Sie dann auf ENTWICKLUNG > Realtime Database.

Klicken Sie auf Datenbank erstellen, um die Realtime Database zu konfigurieren und einzurichten:

Wählen Sie einen beliebigen Datenbankspeicherort aus.
Wählen Sie im nächsten Schritt die Sicherheitsregeln für den Testmodus aus und klicken Sie auf Aktivieren:

Ihre App ist jetzt für die Verwendung der Firebase-Datenbank konfiguriert.
FirebaseManager verwenden
Ersetzen Sie nun StorageManager durch FirebaseManager.
Suchen Sie in Android Studio im Verzeichnis work nach der Klasse CloudAnchorFragment. Ersetzen Sie StorageManager durch eine FirebaseManager:
// Find this line.
private final StorageManager storageManager = new StorageManager();
// And replace it with this line.
private FirebaseManager firebaseManager;
Initialisieren Sie firebaseManager in der Methode onAttach:
public void onAttach(@NonNull Context context) {
super.onAttach(context);
tapHelper = new TapHelper(context);
trackingStateHelper = new TrackingStateHelper(requireActivity());
// The next line is the new addition.
firebaseManager = new FirebaseManager(context);
}
Ändern Sie die Methode onShortCodeEntered so:
private void onShortCodeEntered(int shortCode) {
firebaseManager.getCloudAnchorId(shortCode, cloudAnchorId -> {
if (cloudAnchorId == null || cloudAnchorId.isEmpty()) {
messageSnackbarHelper.showMessage(
getActivity(),
"A Cloud Anchor ID for the short code " + shortCode + " was not found.");
return;
}
resolveButton.setEnabled(false);
future = session.resolveCloudAnchorAsync(
cloudAnchorId, (anchor, cloudState) -> onResolveComplete(anchor, cloudState, shortCode));
});
}
Ändern Sie dann die onHostComplete-Methode so:
private void onHostComplete(String cloudAnchorId, CloudAnchorState cloudState) {
if (cloudState == CloudAnchorState.SUCCESS) {
firebaseManager.nextShortCode(shortCode -> {
if (shortCode != null) {
firebaseManager.storeUsingShortCode(shortCode, cloudAnchorId);
messageSnackbarHelper.showMessage(getActivity(), "Cloud Anchor Hosted. Short code: " + shortCode);
} else {
// Firebase could not provide a short code.
messageSnackbarHelper.showMessage(getActivity(), "Cloud Anchor Hosted, but could not "
+ "get a short code from Firebase.");
}
});
} else {
messageSnackbarHelper.showMessage(getActivity(), "Error while hosting: " + cloudState.toString());
}
}
App erstellen und ausführen: Sie sollten denselben UI-Ablauf wie im vorherigen Abschnitt sehen. Der Unterschied besteht darin, dass jetzt die Online-Firebase-Datenbank zum Speichern der Cloud Anchor-IDs und Kurzcodes verwendet wird und nicht der geräteinterne Speicher.
Tests mit mehreren Nutzern
So testen Sie die Nutzung durch mehrere Nutzer:
- Installieren Sie die App auf zwei Geräten.
- Verwenden Sie ein Gerät, um einen Anker zu hosten und einen Shortcode zu generieren.
- Verwenden Sie das andere Gerät, um den Anker mit diesem Shortcode aufzulösen.
Sie sollten Anker auf einem Gerät hosten, einen Shortcode erhalten und den Shortcode auf dem anderen Gerät verwenden können, um den Anker an derselben Stelle zu sehen.
6. Zusammenfassung
Glückwunsch! Sie haben das Ende dieses Codelabs erreicht.
Behandelte Themen
- Anker mit dem ARCore SDK hosten und eine Cloud Anchor-ID abrufen
- Cloud Anchor-IDs zum Auflösen von Anchors verwenden
- Cloud Anchor-IDs zwischen verschiedenen AR-Sitzungen auf demselben oder auf verschiedenen Geräten speichern und freigeben





