1. Genel Bakış
ARCore, mobil cihazlarda artırılmış gerçeklik uygulamaları oluşturmaya yönelik bir platformdur. Cloud Anchors API, ortak bir referans çerçevesi paylaşan AR uygulamaları oluşturmanıza olanak tanır. Böylece birden fazla kullanıcı, sanal içeriği aynı gerçek dünya konumuna yerleştirebilir.
Bu codelab, Cloud Anchors API'yi kullanma konusunda size yol gösterir. Mevcut bir ARCore uygulamasını alıp Cloud Anchors'ı kullanacak şekilde değiştirecek ve ortak bir AR deneyimi oluşturacaksınız.
ARCore bağlantı noktaları ve kalıcı Cloud Anchors
ARCore'daki temel kavramlardan biri, gerçek dünyada sabit bir konumu tanımlayan Anchor'dur. ARCore, hareket izleme özelliği zaman içinde iyileştikçe bir sabitleme noktasının duruş değerini otomatik olarak ayarlar.
Cloud Anchor'lar, bulutta barındırılan Anchor'lardır. Kullanıcılar ve cihazları arasında ortak bir referans çerçevesi oluşturmak için birden fazla kullanıcı tarafından çözülebilir.
Anchor'ı barındırma
Bir bağlantı noktası barındırıldığında şunlar olur:
- Sabitleyicinin dünyaya göre duruşu buluta yüklenir ve bir Cloud Anchor kimliği alınır.
Cloud Anchor kimliği, bu sabitleyiciyi çözmek isteyen herkese gönderilmesi gereken bir dizedir. - Sabit nokta için görsel veriler içeren bir veri kümesi Google sunucularına yüklenir.
Bu veri kümesi, cihaz tarafından yakın zamanda görülen görsel verileri içerir. Cihazı biraz hareket ettirerek, barındırma işleminden önce sabitleme noktasının etrafındaki alanı farklı bakış açılarından yakalamak daha iyi bir yerelleştirme sağlar.
Cloud Anchor kimliklerini aktarma
Bu codelab'de, Firebase'i kullanarak Cloud Anchor kimliklerini aktaracaksınız. Cloud Anchor kimliklerini başka yöntemlerle paylaşabilirsiniz.
Bağlantı çözümleniyor
Bir sabiti Cloud Anchor kimliğini kullanarak çözmek için Cloud Anchor API'yi kullanabilirsiniz. Bu işlem, orijinal barındırılan çapa ile aynı fiziksel konumda yeni bir çapa oluşturur. Çözümleme sırasında cihaz, orijinal barındırılan bağlantı noktasıyla aynı fiziksel ortama bakmalıdır.
Kalıcı Bulut Bağlantı Noktaları
1.20 sürümünden önce, Cloud Anchor'lar barındırıldıktan sonra yalnızca 24 saat boyunca çözümlenebiliyordu. Persistent Cloud Anchors API ile oluşturulduktan sonra 1 gün ila 365 gün boyunca çözümlenebilen bir bulut bağlantısı oluşturabilirsiniz.
Ne oluşturacaksınız?
Bu codelab'de, önceden oluşturulmuş bir ARCore uygulamasını temel alarak çalışacaksınız. Codelab'in sonunda uygulamanız şunları yapabilecek:
- Kalıcı Cloud Anchor'lar barındırabilme ve Cloud Anchor kimlikleri alabilme
- Android
SharedPreferencesile kolayca almak için Cloud Anchor kimliklerini cihaza kaydedin. - Daha önce barındırılan bağlantıları çözmek için kaydedilmiş Cloud Anchor kimliklerini kullanın. Bu sayede, bu codelab'in amaçları doğrultusunda tek bir cihazla çok kullanıcılı bir deneyimi kolayca simüle edebiliriz.
- Aynı uygulamayı çalıştıran başka bir cihazla Cloud Anchor kimliklerini paylaşarak birden fazla kullanıcının Android heykelini aynı konumda görmesini sağlayın.
Android heykeli, Cloud Anchor'ın konumunda oluşturulur:

Neler öğreneceksiniz?
- ARCore SDK'yı kullanarak nasıl sabitleme noktası barındırılacağı ve Cloud Anchor kimliğinin nasıl alınacağı.
- Çapaları çözmek için Cloud Anchor kimliklerini kullanma.
- Aynı cihazda veya farklı cihazlarda, farklı AR oturumları arasında Cloud Anchor kimliklerini depolama ve paylaşma
İhtiyacınız olanlar
- Geliştirme makinenize USB kablosuyla bağlı desteklenen bir ARCore cihazı.
- AR için Google Play Hizmetleri 1.22 veya sonraki bir sürüm.
- Android Studio (3.0 veya sonraki sürümler) yüklü bir geliştirme makinesi.
2. Geliştirme ortamınızı kurma
Geliştirme makinesini ayarlama
ARCore cihazınızı USB kablosuyla bilgisayarınıza bağlayın. Cihazınızın USB üzerinden hata ayıklamaya izin verdiğinden emin olun.
Bir terminal açıp aşağıdaki şekilde adb devices komutunu çalıştırın:
adb devices List of devices attached <DEVICE_SERIAL_NUMBER> device
<DEVICE_SERIAL_NUMBER>, cihazınıza özgü bir dize olur. Devam etmeden önce tam olarak bir cihaz gördüğünüzden emin olun.
Kodu indirme ve yükleme
Depoyu klonlayabilirsiniz:
git clone https://github.com/googlecodelabs/arcore-cloud-anchors.git
Alternatif olarak, bir ZIP dosyası indirip ayıklayabilirsiniz:
Android Studio'yu başlatın. Open an existing Android Studio project (Mevcut bir Android Studio projesini aç) seçeneğini tıklayın. Ardından, yukarıda indirilen ZIP dosyasını çıkardığınız dizine gidin ve arcore-cloud-anchors dizinini çift tıklayın.
Bu, birden fazla modül içeren tek bir Gradle projesidir. Android Studio'nun sol üst kısmındaki Proje bölmesi henüz Proje bölmesinde gösterilmiyorsa açılır menüden Projeler'i tıklayın. Sonuç şu şekilde olmalıdır:

Ağırlıklı olarak work modülünde çalışacaksınız. Diğer modüller arasında, kullanacağınız bir dizi yararlı sarmalayıcı sınıfı içeren helpers modülü de bulunur. Ayrıca, codelab'in her bölümü için eksiksiz çözümler de vardır. helpers modülü hariç her modül, oluşturulabilir bir uygulamadır.
Android Gradle eklentisini yükseltmenizi öneren bir iletişim kutusu görürseniz Bu proje için tekrar hatırlatma'yı tıklayın:

Run > Run... (Çalıştır > Çalıştır...) seçeneğini tıklayın. > "work". Görüntülenen Select Deployment Target (Dağıtım Hedefini Seç) iletişim kutusunda cihazınız Connected Devices (Bağlı Cihazlar) altında listelenmelidir. Cihazınızı seçip Tamam'ı tıklayın. Android Studio, ilk uygulamayı oluşturup cihazınızda çalıştırır.
Uygulamayı ilk kez çalıştırdığınızda CAMERA izni istenir. Devam etmek için İZİN VER'e dokunun.

Uygulama nasıl kullanılır?
- Uygulamanın bir düzlem bulmasına yardımcı olmak için cihazı hareket ettirin. Bir düzlem bulunduğunda noktalı bir yüzey olarak gösterilir.
- Sabitleyiciyi yerleştirmek için düz bir zeminde herhangi bir yere dokunun. Sabitleme noktasının yerleştirildiği yere bir Android şekli çizilir. Bu uygulama, aynı anda yalnızca bir sabitleme noktası yerleştirmenize olanak tanır.
- Cihazı hareket ettirin. Cihaz hareket etse bile figür aynı yerde kalmış gibi görünmelidir.
- Sabitleme noktasını kaldırmak için TEMİZLE düğmesine basın. Bu işlem, başka bir bağlantı yerleştirmenize olanak tanır.

Şu anda bu uygulama, yalnızca ARCore tarafından sağlanan hareket izlemeyi kullanarak uygulamanın tek bir çalışmasında bir sabitleyiciyi izler. Uygulamadan çıkmaya, uygulamayı sonlandırmaya ve yeniden başlatmaya karar verirseniz daha önce yerleştirilen sabitleyici ve duruşu da dahil olmak üzere sabitleyiciyle ilgili tüm bilgiler kaybolur.
Sonraki birkaç bölümde, bu uygulamayı temel alarak bağlantıların AR oturumları arasında nasıl paylaşılabileceğini öğreneceksiniz.
3. Anchor'ı barındırma
Bu bölümde, bir sabitleyiciye ev sahipliği yapmak için work projesini değiştireceksiniz. Kod yazmadan önce uygulamanın yapılandırmasında birkaç değişiklik yapmanız gerekir.
İnternet izinlerini tanımlama
Cloud Anchor'lar, ARCore Cloud Anchor API hizmetiyle iletişimi gerektirdiğinden uygulamanızın internete erişim izni olmalıdır.
AndroidManifest.xml dosyanızda, android.permission.CAMERA izin bildiriminin hemen altına aşağıdaki satırı ekleyin:
<!-- Find this line... -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- Add the line right below -->
<uses-permission android:name="android.permission.INTERNET"/>
ARCore API'yi etkinleştirme
- ARCore API hizmet sayfasına gidin.
- Proje listesinde bir proje seçin veya yeni bir proje oluşturun.
- Etkinleştir'i tıklayın.
Anahtarsız kimlik doğrulamayı ayarlama
Kalıcı Cloud Anchor'ları kullanmak için ARCore API ile kimlik doğrulaması yaparken anahtarsız kimlik doğrulama kullanmanız gerekir.
- Google Cloud Platform Console'a gidin.
- Proje listesinden bir proje seçin.
- API'ler ve hizmetler sayfası henüz açık değilse konsolun sol tarafındaki menüyü açıp API'ler ve Hizmetler'i seçin.
- Sol tarafta Kimlik bilgileri'ni tıklayın.
- Kimlik bilgileri oluştur'u tıklayın ve OAuth istemci kimliği'ni seçin.
- Aşağıdaki değerleri girin:
- Uygulama türü: Android
- Paket adı:
com.google.ar.core.codelab.cloudanchor
- Hata ayıklama imzalama sertifikanızın parmak izini alma:
- Android Studio projenizde Gradle toolpane'i açın.
- cloud-anchors > work > Tasks > android içinde signingReport görevini çalıştırın.
- SHA-1 parmak izini Google Cloud'daki SHA-1 sertifika parmak izi alanına kopyalayın.
ARCore'u yapılandırma
Ardından, uygulamayı normal bir bağlantı yerine kullanıcı dokunduğunda bağlantı barındıracak şekilde değiştireceksiniz. Bunun için ARCore oturumunu, Cloud Anchor'ları etkinleştirecek şekilde yapılandırmanız gerekir.
CloudAnchorFragment.java dosyasına aşağıdaki kodu ekleyin:
// 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);
Devam etmeden önce uygulamanızı oluşturup çalıştırın. Yalnızca work modülünü oluşturduğunuzdan emin olun. Uygulamanız başarıyla oluşturulmalı ve eskisi gibi çalışmaya devam etmelidir.
Tema barındırma
ARCore API'ye yüklenecek bir bağlantı öğesi barındırmanın zamanı geldi.
CloudAnchorFragment sınıfınıza aşağıdaki yeni alanı ekleyin:
// Find this line...
private Anchor currentAnchor = null;
// Add these lines right below.
@Nullable
private Future future = null;
com.google.ar.core.Future için içe aktarma işlemi eklemeyi unutmayın.
onClearButtonPressed yöntemini aşağıdaki gibi değiştirin:
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;
}
}
Ardından, CloudAnchorFragment sınıfınıza aşağıdaki yöntemi ekleyin:
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());
}
}
CloudAnchorFragment sınıfındaki handleTap yöntemini bulun ve şu satırları ekleyin:
// Find this line...
currentAnchor = hit.createAnchor();
// Add these lines right below:
messageSnackbarHelper.showMessage(getActivity(), "Now hosting anchor...");
future = session.hostCloudAnchorAsync(currentAnchor, 300, this::onHostComplete);
Uygulamanızı Android Studio'dan tekrar çalıştırın. Bir bağlantı yerleştirdiğinizde "Şu anda bağlantı yerleştiriliyor..." mesajını görürsünüz. Barındırma işlemi başarıyla tamamlandığında başka bir mesaj görürsünüz. "Error hosting anchor: ERROR_NOT_AUTHORIZED" (Çapa barındırma hatası: ERROR_NOT_AUTHORIZED) mesajını görüyorsanız OAuth istemcinizin doğru şekilde yapılandırıldığını doğrulayın.

Sabit kimliği bilen ve sabitle aynı fiziksel alanda bulunan herkes, sabit kimliğini kullanarak çevrelerine göre tam olarak aynı duruşta (konum ve yön) bir sabitleme oluşturabilir.
Ancak bağlantı kimliği uzundur ve başka bir kullanıcının manuel olarak girmesi kolay değildir. Aşağıdaki bölümlerde, aynı veya başka bir cihazda bağlantı çözmeye izin vermek için Cloud Anchor kimliklerini kolayca alınabilecek şekilde depolayacaksınız.
4. Kimlikleri saklama ve bağlantı noktalarını çözme
Bu bölümde, başka bir kullanıcının manuel olarak girmesini kolaylaştırmak için uzun Cloud Anchor kimliklerine kısa kodlar atayacaksınız. Cloud Anchor kimliklerini anahtar/değer tablosunda değer olarak depolamak için Shared Preferences API'sini kullanacaksınız. Bu tablo, uygulama kapatılıp yeniden başlatılsa bile kalıcı olur.
StorageManager adlı bir yardımcı sınıf sizin için zaten sağlanmıştır. Bu, yeni benzersiz kısa kodlar oluşturma ve Cloud Anchor kimliklerini okuma/yazma yöntemlerine sahip SharedPreferences API'nin sarmalayıcısıdır.
Depolama alanı yöneticisini kullanma
Kısa kodlarla Cloud Anchor kimliklerini depolamak için CloudAnchorFragment öğesini StorageManager olarak değiştirin. Böylece kimlikler kolayca alınabilir.
CloudAnchorFragment içinde aşağıdaki yeni alanı oluşturun:
// Find this line...
private TapHelper tapHelper;
// And add the storageManager.
private final StorageManager storageManager = new StorageManager();
Ardından onHostComplete yöntemini değiştirin:
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());
}
}
Şimdi Android Studio'dan uygulamayı oluşturup çalıştırın. Bir bağlantı oluşturup barındırdığınızda uzun Cloud Anchor kimlikleri yerine kısa kodların gösterildiğini görürsünüz.
Sabit öğe yerleştirdikten hemen sonra | Biraz bekledikten sonra |
|
|
StorageManager tarafından oluşturulan kısa kodların şu anda her zaman artan sırada atandığını unutmayın.
Ardından, kısa kodları girmenize ve bağlantıları yeniden oluşturmanıza olanak tanıyan birkaç kullanıcı arayüzü öğesi ekleyeceksiniz.
Çözüm düğmesini ekleme
CLEAR (TEMİZLE) düğmesinin yanına başka bir düğme ekleyeceksiniz. Bu, ÇÖZ düğmesidir. ÇÖZÜM düğmesini tıkladığınızda, kullanıcıdan kısa kod girmesini isteyen bir iletişim kutusu açılır. Kısa kod, StorageManager'dan Cloud Anchor kimliğini almak ve sabitleyiciyi çözmek için kullanılır.
Düğmeyi eklemek için res/layout/cloud_anchor_fragment.xml dosyasını değiştirmeniz gerekir. Android Studio'da dosyayı çift tıklayın, ardından ham XML'yi görüntülemek için en alttaki "Metin" sekmesini tıklayın. Aşağıdaki değişiklikleri yapın:
<!-- 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"/>
Şimdi CloudAnchorFragment öğesine yeni bir alan ekleyin:
private Button resolveButton;
Yeni bir yöntem ekleme:
private void onResolveButtonPressed() {
ResolveDialogFragment dialog = new ResolveDialogFragment();
dialog.show(getFragmentMagetActivity().getSupportFragmentManagernager(), "Resolve");
}
resolveButton öğesini onCreateView yönteminde aşağıdaki gibi başlatın:
// 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());
handleTap yöntemini bulup değiştirin:
private void handleTap(Frame frame, Camera camera) {
// ...
// Find this line.
currentAnchor = hit.createAnchor();
// Add this line right below.
getActivity().runOnUiThread(() -> resolveButton.setEnabled(false));
}
onClearButtonPressed yöntemine bir satır ekleyin:
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);
}
Android Studio'dan uygulamayı oluşturup çalıştırın. TEMİZLE düğmesinin yanında ÇÖZ düğmesini görürsünüz. ÇÖZÜM düğmesi tıklandığında aşağıdaki gibi bir iletişim kutusu açılmalıdır.
ÇÖZÜM düğmesi artık görünür durumda | Düğmeyi tıkladığınızda bu iletişim kutusu görünür. |
|
|
Düzleme dokunup bir bağlantı noktası barındırdığınızda ÇÖZ düğmesi devre dışı bırakılır. Ancak TEMİZLE düğmesine dokunduğunuzda düğme tekrar etkinleştirilir. Bu, tasarım gereğidir. Böylece sahnede aynı anda yalnızca bir bağlantı noktası bulunur.
"Resolve Anchor" iletişim kutusu hiçbir şey yapmıyor ancak bunu şimdi değiştireceksiniz.
Bağlantıları Çözümleme
CloudAnchorFragment sınıfına aşağıdaki yöntemleri ekleyin:
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);
}
}
Ardından, onResolveButtonPressed yöntemini değiştirin:
private void onResolveButtonPressed() {
ResolveDialogFragment dialog = ResolveDialogFragment.createWithOkListener(
this::onShortCodeEntered);
dialog.show(getActivity().getSupportFragmentManager(), "Resolve");
}
Android Studio'dan uygulamayı oluşturup çalıştırın ve aşağıdaki adımları uygulayın:
- Düz bir zeminde sabitleyici oluşturun ve sabitleyicinin barındırılmasını bekleyin.
Kısa kodu hatırlayın. - Sabitleme noktasını silmek için CLEAR düğmesine basın.
- ÇÖZ düğmesine basın. 1. adımdaki kısa kodu girin.
- Çevrenin aynı konumunda, başlangıçta yerleştirdiğiniz gibi bir bağlantı görürsünüz.
- Uygulamadan çıkıp uygulamayı kapatın ve ardından tekrar açın.
- (3) ve (4) numaralı adımları tekrarlayın. Aynı konumda yeni bir bağlantı görmeniz gerekir.
Kısa kod girme | Bağlantı başarıyla çözüldü |
|
|
5. Cihazlar arasında paylaşma
Bir sabitleme noktasının Cloud Anchor kimliğini cihazınızın yerel depolama alanına nasıl kaydedebileceğinizi ve daha sonra aynı sabitleme noktasını yeniden oluşturmak için nasıl alabileceğinizi gördünüz. Ancak Cloud Anchor'ların tüm potansiyeli, Cloud Anchor kimliklerini farklı cihazlar arasında paylaşabildiğinizde ortaya çıkar.
Uygulamanızın Cloud Anchor kimliklerini nasıl paylaşacağı size bağlıdır. Dizeyi bir cihazdan diğerine aktarmak için herhangi bir yöntem kullanılabilir. Bu codelab'de, uygulamanın örnekleri arasında Cloud Anchor kimliklerini aktarmak için Firebase Realtime Database'i kullanacaksınız.
Firebase'i ayarlama
Bu uygulamayla kullanmak için Google Hesabınızla bir Firebase Realtime Database oluşturmanız gerekir. Bu işlem, Android Studio'daki Firebase Asistanı ile kolayca yapılabilir.
Android Studio'da Araçlar > Firebase'i tıklayın. Açılan Asistan bölmesinde Realtime Database'i, ardından Verileri kaydetme ve alma'yı tıklayın:

Android Studio projenizi yeni veya mevcut bir Firebase projesine bağlamak için Firebase'e bağlan düğmesini tıklayın.

Bu işlem, bir modül seçmenizi ister. work modülünü seçin:

Başlangıç bağlantısı iletişim kutusu gösterilir. Bu işlem biraz zaman alabilir.

Google Hesabınızla oturum açın ve Android Studio'ya dönene kadar uygulamanız için Firebase projesi oluşturma web iş akışını tamamlayın.
Ardından, Assistant (Yardımcı) bölmesinde add the Realtime Database to your app (Realtime Database'i uygulamanıza ekleyin) seçeneğini tıklayın:

Açılan iletişim kutusunda, Hedef modül açılır listesinden work'ü seçin ve Değişiklikleri Kabul Et'i tıklayın.

Bu, şu işlemi gerçekleştirecek:
workdizininizegoogle-services.jsondosyası ekleme- Aynı dizindeki
build.gradledosyanıza birkaç satır ekleyin. - Uygulamayı oluşturup çalıştırın (Firebase veritabanı sürüm numarasıyla ilgili bir çözüm hatası görebilirsiniz).
work modülü build.gradle dosyasında aşağıdaki satırı bulun ve kaldırın (xxxx, en son sürüm numarası için yer tutucudur).
dependencies {
...
implementation 'com.google.firebase:firebase-database:xxxx'
Ardından, Firebase Realtime Database'inizi herkese yazılabilir şekilde yapılandırmak için Herkese açık erişim için kurallarınızı yapılandırma sayfasından bağlantısı verilen talimatları inceleyin (ancak henüz uygulamayın). Bu sayede bu codelab'deki testler basitleştirilir:

Firebase konsolunda Android Studio projenizi bağladığınız projeyi seçin, ardından DERLEME > Realtime Database'i seçin.

Realtime Database'i yapılandırmak ve ayarlamak için Veritabanı Oluştur'u tıklayın:

Herhangi bir veritabanı konumu seçin.
Sonraki adımda, test modu güvenlik kurallarını seçin ve Etkinleştir'i tıklayın:

Uygulamanız artık Firebase veritabanını kullanacak şekilde yapılandırıldı.
FirebaseManager'ı kullanma
Şimdi StorageManager yerine FirebaseManager değerini gireceksiniz.
Android Studio'da work dizini altındaki CloudAnchorFragment sınıfını bulun. StorageManager yerine FirebaseManager koyun:
// Find this line.
private final StorageManager storageManager = new StorageManager();
// And replace it with this line.
private FirebaseManager firebaseManager;
firebaseManager öğesini onAttach yönteminde başlatın:
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);
}
onShortCodeEntered yöntemini aşağıdaki gibi değiştirin:
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));
});
}
Ardından, onHostComplete yöntemini aşağıdaki gibi değiştirin:
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());
}
}
Uygulamanızı oluşturun ve çalıştırın. Artık cihaz yerel depolama alanı yerine Cloud Anchor kimliklerini ve kısa kodları depolamak için online Firebase veritabanı kullanıldığından, önceki bölümdekiyle aynı kullanıcı arayüzü akışını görmeniz gerekir.
Çok kullanıcılı test
Çok kullanıcılı bir deneyimi test etmek için iki farklı telefon kullanın:
- Uygulamayı iki cihaza yükleyin.
- Bir cihazı kullanarak bağlantı oluşturun ve kısa kod oluşturun.
- Bu kısa kodu kullanarak sabitleme sorununu çözmek için diğer cihazı kullanın.
Bir cihazdan bağlantı noktaları barındırabilir, kısa kod alabilir ve bağlantı noktasını aynı yerde görmek için kısa kodu diğer cihazda kullanabilirsiniz.
6. Özet
Tebrikler! Bu codelab'in sonuna geldiniz.
İşlediğimiz konular
- ARCore SDK'yı kullanarak nasıl sabitleme noktası barındırılacağı ve Cloud Anchor kimliğinin nasıl alınacağı.
- Çapaları çözmek için Cloud Anchor kimliklerini kullanma.
- Aynı cihazdaki veya farklı cihazlardaki farklı AR oturumları arasında Cloud Anchor kimliklerini depolama ve paylaşma
Daha fazla bilgi
- Android için Cloud Anchors'a genel bakış başlıklı makaleyi inceleyin.





