1. खास जानकारी
ARCore, मोबाइल डिवाइसों पर ऑगमेंटेड रिएलिटी ऐप्लिकेशन बनाने का एक प्लैटफ़ॉर्म है. Cloud Anchors API की मदद से, ऐसे एआर ऐप्लिकेशन बनाए जा सकते हैं जो एक ही फ़्रेम-ऑफ़-रेफ़रंस शेयर करते हैं. इससे कई उपयोगकर्ता, एक ही जगह पर वर्चुअल कॉन्टेंट रख पाते हैं.
इस कोडलैब में, Cloud Anchors API के बारे में बताया गया है. आपको मौजूदा ARCore ऐप्लिकेशन लेना होगा. इसके बाद, उसमें Cloud Anchors का इस्तेमाल करने के लिए बदलाव करना होगा. साथ ही, एआर का शेयर किया गया अनुभव बनाना होगा.
ARCore एंकर और परसिस्टेंट क्लाउड एंकर
ARCore में ऐंकर एक बुनियादी कॉन्सेप्ट है. यह असल दुनिया में किसी तय जगह के बारे में बताता है. ARCore, समय के साथ ऐंकर के पोज़ की वैल्यू को अपने-आप अडजस्ट करता है, क्योंकि समय के साथ मोशन ट्रैकिंग बेहतर होती जाती है.
क्लाउड ऐंकर, ऐसे ऐंकर होते हैं जिन्हें क्लाउड में होस्ट किया जाता है. इन्हें कई उपयोगकर्ता हल कर सकते हैं, ताकि सभी उपयोगकर्ताओं और उनके डिवाइसों के लिए एक जैसा फ़्रेम ऑफ़ रेफ़रंस तय किया जा सके.
किसी ऐंकर को होस्ट करना
एंकर के होस्ट किए जाने पर, ये काम होते हैं:
- एंकर की पोज़िशन को क्लाउड पर अपलोड किया जाता है. साथ ही, क्लाउड ऐंकर आईडी मिलता है.
क्लाउड ऐंकर आईडी एक स्ट्रिंग होती है. इसे उस व्यक्ति को भेजना होता है जिसे इस ऐंकर को हल करना है. - एंकर के लिए विज़ुअल डेटा वाला डेटासेट, Google के सर्वर पर अपलोड किया जाता है.
इस डेटासेट में, डिवाइस पर हाल ही में देखा गया विज़ुअल डेटा होता है. होस्ट करने से पहले, डिवाइस को थोड़ा घुमाएं, ताकि ऐंकर के आस-पास के इलाके को अलग-अलग नज़रियों से कैप्चर किया जा सके. इससे बेहतर लोकलाइज़ेशन मिलेगा.
क्लाउड ऐंकर आईडी ट्रांसफ़र करना
इस कोडलैब में, Firebase का इस्तेमाल करके, क्लाउड ऐंकर आईडी ट्रांसफ़र किए जाएंगे. आपके पास Cloud Anchor आईडी को अन्य तरीकों से शेयर करने का विकल्प होता है.
ऐंकर को हल करना
Cloud Anchor API का इस्तेमाल करके, क्लाउड ऐंकर आईडी की मदद से किसी ऐंकर को हल किया जा सकता है. इससे उसी जगह पर एक नया ऐंकर बन जाता है जहां ओरिजनल होस्ट किया गया ऐंकर मौजूद है. ऐंकर को हल करते समय, डिवाइस को उसी फ़िज़िकल एनवायरमेंट को देखना होगा जिसमें ओरिजनल होस्ट किया गया ऐंकर मौजूद है.
परसिस्टेंट क्लाउड ऐंकर
1.20 से पहले, क्लाउड ऐंकर को होस्ट करने के बाद, सिर्फ़ 24 घंटे तक हल किया जा सकता था. परसिस्टेंट क्लाउड ऐंकर एपीआई की मदद से, ऐसा क्लाउड ऐंकर बनाया जा सकता है जिसे बनाने के बाद, एक दिन से लेकर 365 दिनों तक हल किया जा सकता है.
आपको क्या बनाना है
इस कोडलैब में, आपको पहले से मौजूद ARCore ऐप्लिकेशन को बेहतर बनाना है. कोडलैब के आखिर तक, आपका ऐप्लिकेशन ये काम कर पाएगा:
- परसिस्टेंट क्लाउड ऐंकर होस्ट करने और क्लाउड ऐंकर आईडी पाने की सुविधा हो.
- डिवाइस पर क्लाउड ऐंकर आईडी सेव करता है, ताकि Android
SharedPreferencesका इस्तेमाल करके उन्हें आसानी से वापस पाया जा सके. - पहले होस्ट किए गए ऐंकर को ठीक करने के लिए, सेव किए गए Cloud Anchor आईडी का इस्तेमाल करें. इससे हमें इस कोडलैब के लिए, एक ही डिवाइस पर कई उपयोगकर्ताओं के अनुभव को सिम्युलेट करने में आसानी होती है.
- क्लाउड ऐंकर आईडी को उसी ऐप्लिकेशन का इस्तेमाल करने वाले किसी दूसरे डिवाइस के साथ शेयर करें, ताकि कई उपयोगकर्ता Android स्टैच्यू को एक ही जगह पर देख सकें.
Android स्टैच्यू को Cloud ऐंकर की जगह पर रेंडर किया गया है:

आपको क्या सीखने को मिलेगा
- ARCore SDK का इस्तेमाल करके ऐंकर होस्ट करने और क्लाउड ऐंकर आईडी पाने का तरीका.
- ऐंकर को हल करने के लिए, Cloud Anchor आईडी का इस्तेमाल कैसे करें.
- एक ही डिवाइस पर या अलग-अलग डिवाइसों पर, एआर के अलग-अलग सेशन के बीच Cloud Anchor आईडी को सेव और शेयर करने का तरीका.
आपको किन चीज़ों की ज़रूरत होगी
- ARCore की सुविधा वाला डिवाइस, जो यूएसबी केबल के ज़रिए डेवलपमेंट मशीन से कनेक्ट हो.
- Google Play Services for AR 1.22 या इसके बाद का वर्शन.
- Android Studio (v3.0 या इसके बाद का वर्शन) वाली डेवलपमेंट मशीन.
2. डेवलपमेंट एनवायरमेंट सेट अप करना
डेवलपमेंट मशीन सेट अप करना
यूएसबी केबल की मदद से, अपने ARCore डिवाइस को कंप्यूटर से कनेक्ट करें. पक्का करें कि आपके डिवाइस पर यूएसबी डीबगिंग की सुविधा चालू हो.
टर्मिनल खोलें और नीचे दिखाए गए तरीके से adb devices चलाएं:
adb devices List of devices attached <DEVICE_SERIAL_NUMBER> device
<DEVICE_SERIAL_NUMBER>, आपके डिवाइस के लिए यूनीक स्ट्रिंग होगा. जारी रखने से पहले, पक्का करें कि आपको सिर्फ़ एक डिवाइस दिखे.
कोड डाउनलोड और इंस्टॉल करना
आपके पास डेटाबेस को क्लोन करने का विकल्प होता है:
git clone https://github.com/googlecodelabs/arcore-cloud-anchors.git
इसके अलावा, ZIP फ़ाइल डाउनलोड करके उसे एक्सट्रैक्ट करें:
Android Studio लॉन्च करें. Android Studio का कोई मौजूदा प्रोजेक्ट खोलें पर क्लिक करें. इसके बाद, उस डायरेक्ट्री पर जाएं जहां आपने ऊपर डाउनलोड की गई ज़िप फ़ाइल को एक्सट्रैक्ट किया है. इसके बाद, arcore-cloud-anchors डायरेक्ट्री पर डबल-क्लिक करें.
यह कई मॉड्यूल वाला एक Gradle प्रोजेक्ट है. अगर Android Studio में सबसे ऊपर बाईं ओर मौजूद प्रोजेक्ट पैन पहले से ही प्रोजेक्ट पैन में नहीं दिख रहा है, तो ड्रॉप-डाउन मेन्यू में जाकर प्रोजेक्ट पर क्लिक करें. नतीजा इस तरह दिखना चाहिए:

आपको मुख्य रूप से work मॉड्यूल में काम करना होगा. अन्य मॉड्यूल में helpers मॉड्यूल शामिल है. इसमें रैपर क्लास का एक सेट होता है, जिसका इस्तेमाल किया जाएगा. कोडलैब के हर हिस्से के लिए, पूरे समाधान भी दिए गए हैं. helpers मॉड्यूल को छोड़कर, हर मॉड्यूल एक ऐसा ऐप्लिकेशन है जिसे बनाया जा सकता है.
अगर आपको Android Gradle प्लगिन को अपग्रेड करने का सुझाव देने वाला कोई डायलॉग दिखता है, तो इस प्रोजेक्ट के लिए मुझे फिर से याद न दिलाएं पर क्लिक करें:

चलाएं > चलाएं... > ‘work'. दिखने वाले डिप्लॉयमेंट टारगेट चुनें डायलॉग में, आपका डिवाइस कनेक्ट किए गए डिवाइस में दिखना चाहिए. अपना डिवाइस चुनें और ठीक है पर क्लिक करें. Android Studio, शुरुआती ऐप्लिकेशन बनाएगा और उसे आपके डिवाइस पर चलाएगा.
पहली बार ऐप्लिकेशन चलाने पर, यह CAMERA अनुमति का अनुरोध करेगा. जारी रखने के लिए, अनुमति दें पर टैप करें.

ऐप्स का उपयोग कैसे करें
- डिवाइस को इधर-उधर घुमाएं, ताकि ऐप्लिकेशन को कोई सतह मिल सके. जब किसी प्लैन का पता चल जाता है, तो उसे डॉट वाली सतह के तौर पर दिखाया जाता है.
- किसी सतह पर एंकर रखने के लिए, उस पर कहीं भी टैप करें. जहां ऐंकर रखा गया था वहां Android की इमेज दिखेगी. यह ऐप्लिकेशन, एक बार में सिर्फ़ एक ऐंकर लगाने की अनुमति देता है.
- डिवाइस को चारों ओर घुमाएं. डिवाइस को इधर-उधर घुमाने पर भी, फ़िगर एक ही जगह पर दिखना चाहिए.
- एंकर हटाने के लिए, हटाएं बटन दबाएं. इससे आपको दूसरा ऐंकर जोड़ने की सुविधा मिलेगी.

फ़िलहाल, यह ऐप्लिकेशन सिर्फ़ ARCore की मोशन ट्रैकिंग सुविधा का इस्तेमाल कर रहा है. इससे ऐप्लिकेशन के एक बार चलने के दौरान, ऐंकर को ट्रैक किया जा सकता है. अगर आपने ऐप्लिकेशन को बंद करके फिर से चालू किया, तो पहले से सेट किया गया ऐंकर और उससे जुड़ी सारी जानकारी मिट जाएगी. इसमें ऐंकर की पोज़िशन भी शामिल है.
अगले कुछ सेक्शन में, इस ऐप्लिकेशन को और बेहतर बनाया जाएगा. इससे यह देखा जा सकेगा कि एआर सेशन के बीच ऐंकर कैसे शेयर किए जा सकते हैं.
3. ऐंकर को होस्ट करना
इस सेक्शन में, ऐंकर को होस्ट करने के लिए work प्रोजेक्ट में बदलाव किया जाएगा. कोड लिखने से पहले, आपको ऐप्लिकेशन के कॉन्फ़िगरेशन में कुछ बदलाव करने होंगे.
INTERNET अनुमतियों की जानकारी देना
Cloud Anchors को ARCore Cloud Anchor API सेवा के साथ कम्यूनिकेट करने की ज़रूरत होती है. इसलिए, आपके ऐप्लिकेशन के पास इंटरनेट ऐक्सेस करने की अनुमति होनी चाहिए.
अपनी AndroidManifest.xml फ़ाइल में, android.permission.CAMERA अनुमति के एलान के ठीक नीचे यह लाइन जोड़ें:
<!-- Find this line... -->
<uses-permission android:name="android.permission.CAMERA"/>
<!-- Add the line right below -->
<uses-permission android:name="android.permission.INTERNET"/>
ARCore API चालू करना
- ARCore API सेवा के पेज पर जाएं.
- प्रोजेक्ट की सूची में, कोई प्रोजेक्ट चुनें या नया प्रोजेक्ट बनाएं.
- चालू करें पर क्लिक करें.
कुंजी के बिना पुष्टि करने की सुविधा सेट अप करना
परसिस्टेंट क्लाउड ऐंकर का इस्तेमाल करने के लिए, आपको ARCore API से पुष्टि करने के लिए, बिना कुंजी वाली पुष्टि करने की सुविधा का इस्तेमाल करना होगा.
- Google Cloud Platform Console पर जाएं.
- प्रोजेक्ट की सूची में से कोई प्रोजेक्ट चुनें.
- अगर 'एपीआई और सेवाएं' पेज पहले से खुला नहीं है, तो कंसोल के बाईं ओर मौजूद मेन्यू खोलें और एपीआई और सेवाएं चुनें.
- बाईं ओर, क्रेडेंशियल पर क्लिक करें.
- क्रेडेंशियल बनाएं पर क्लिक करें. इसके बाद, OAuth क्लाइंट आईडी चुनें.
- ये वैल्यू डालें:
- ऐप्लिकेशन का टाइप: Android
- पैकेज का नाम:
com.google.ar.core.codelab.cloudanchor
- अपने डीबग साइनिंग सर्टिफ़िकेट का फ़िंगरप्रिंट वापस पाएं:
- Android Studio प्रोजेक्ट में, Gradle टूलपेन खोलें.
- cloud-anchors > work > Tasks > android में जाकर, signingReport टास्क चलाएं.
- SHA-1 फ़िंगरप्रिंट को Google Cloud में मौजूद SHA-1 सर्टिफ़िकेट फ़िंगरप्रिंट फ़ील्ड में कॉपी करें.
ARCore को कॉन्फ़िगर करना
इसके बाद, ऐप्लिकेशन में बदलाव किया जाएगा, ताकि उपयोगकर्ता के टैप करने पर ऐंकर होस्ट किया जा सके. इसके लिए, आपको ARCore सेशन को कॉन्फ़िगर करना होगा, ताकि क्लाउड ऐंकर की सुविधा चालू हो सके.
CloudAnchorFragment.java फ़ाइल में, यह कोड जोड़ें:
// 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);
आगे बढ़ने से पहले, अपना ऐप्लिकेशन बनाएं और उसे चलाएं. पक्का करें कि आपने सिर्फ़ work मॉड्यूल बनाया हो. आपका ऐप्लिकेशन, पहले की तरह ही काम करेगा.
ऐंकर को होस्ट करना
अब एक ऐंकर होस्ट करने का समय आ गया है, जिसे ARCore API पर अपलोड किया जाएगा.
अपनी CloudAnchorFragment क्लास में यह नया फ़ील्ड जोड़ें:
// Find this line...
private Anchor currentAnchor = null;
// Add these lines right below.
@Nullable
private Future future = null;
com.google.ar.core.Future के लिए इंपोर्ट जोड़ना न भूलें.
onClearButtonPressed तरीके में इस तरह बदलाव करें:
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;
}
}
इसके बाद, अपनी CloudAnchorFragment क्लास में यह तरीका जोड़ें:
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 क्लास में handleTap तरीका ढूंढें और ये लाइनें जोड़ें:
// Find this line...
currentAnchor = hit.createAnchor();
// Add these lines right below:
messageSnackbarHelper.showMessage(getActivity(), "Now hosting anchor...");
future = session.hostCloudAnchorAsync(currentAnchor, 300, this::onHostComplete);
Android Studio से ऐप्लिकेशन को फिर से चलाएं. ऐंकर सेट करते समय, आपको "Now hosting anchor..." मैसेज दिखना चाहिए. होस्टिंग की प्रोसेस पूरी होने पर, आपको एक और मैसेज दिखेगा. अगर आपको "ऐंकर होस्ट करने में गड़बड़ी: ERROR_NOT_AUTHORIZED" दिखती है, तो पुष्टि करें कि आपका OAuth क्लाइंट सही तरीके से कॉन्फ़िगर किया गया है.

जिस व्यक्ति को ऐंकर आईडी पता है और जो ऐंकर के आस-पास मौजूद है वह ऐंकर आईडी का इस्तेमाल करके, ऐंकर को ठीक उसी पोज़ (जगह और ओरिएंटेशन) में बना सकता है.
हालांकि, ऐंकर आईडी लंबा होता है और किसी दूसरे उपयोगकर्ता के लिए इसे मैन्युअल तरीके से डालना आसान नहीं होता. यहां दिए गए सेक्शन में, Cloud Anchor आईडी को आसानी से वापस पाने के तरीके से सेव किया जाएगा. इससे, एक ही या किसी दूसरे डिवाइस पर ऐंकर को हल करने की अनुमति दी जा सकेगी.
4. स्टोर आईडी और ऐंकर ठीक करना
इस हिस्से में, आपको लंबे Cloud Anchor आईडी को छोटे कोड असाइन करने होंगे, ताकि दूसरा उपयोगकर्ता उन्हें आसानी से मैन्युअल तरीके से डाल सके. Cloud Anchor आईडी को की-वैल्यू टेबल में वैल्यू के तौर पर सेव करने के लिए, Shared Preferences API का इस्तेमाल किया जाएगा. ऐप्लिकेशन बंद करके फिर से चालू करने पर भी, यह टेबल बनी रहेगी.
आपके लिए, StorageManager नाम की एक हेल्पर क्लास पहले से ही उपलब्ध कराई गई है. यह SharedPreferences एपीआई के चारों ओर एक रैपर है. इसमें नए यूनीक शॉर्ट कोड जनरेट करने के तरीके हैं. साथ ही, इसमें Cloud Anchor आईडी को पढ़ने/लिखने के तरीके भी हैं.
StorageManager का इस्तेमाल करना
CloudAnchorFragment में बदलाव करके, StorageManager का इस्तेमाल करें, ताकि छोटे कोड के साथ Cloud Anchor आईडी सेव किए जा सकें. इससे उन्हें आसानी से वापस पाया जा सकता है.
CloudAnchorFragment में यह नया फ़ील्ड बनाएं:
// Find this line...
private TapHelper tapHelper;
// And add the storageManager.
private final StorageManager storageManager = new StorageManager();
इसके बाद, onHostComplete के तरीके में बदलाव करें:
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());
}
}
अब Android Studio से, ऐप्लिकेशन बनाएं और उसे चलाएं. ऐंकर बनाने और होस्ट करने पर, आपको लंबे क्लाउड ऐंकर आईडी के बजाय छोटे कोड दिखेंगे.
ऐंकर लगाने के तुरंत बाद | कुछ देर इंतज़ार करने के बाद |
|
|
ध्यान दें कि StorageManager से जनरेट किए गए छोटे कोड, फ़िलहाल हमेशा बढ़ते क्रम में असाइन किए जाते हैं.
इसके बाद, आपको कुछ यूज़र इंटरफ़ेस (यूआई) एलिमेंट जोड़ने होंगे. इनकी मदद से, छोटे कोड डाले जा सकेंगे और ऐंकर फिर से बनाए जा सकेंगे.
'हल करें' बटन जोड़ना
आपको CLEAR बटन के बगल में एक और बटन जोड़ना होगा. यह हल करें बटन होगा. हल करें बटन पर क्लिक करने से एक डायलॉग बॉक्स खुलेगा. इसमें उपयोगकर्ता से शॉर्ट कोड मांगा जाएगा. शॉर्ट कोड का इस्तेमाल, StorageManager से क्लाउड ऐंकर आईडी को वापस पाने और ऐंकर को हल करने के लिए किया जाता है.
बटन जोड़ने के लिए, आपको res/layout/cloud_anchor_fragment.xml फ़ाइल में बदलाव करना होगा. Android Studio में, फ़ाइल पर दो बार क्लिक करें. इसके बाद, सबसे नीचे मौजूद "टेक्स्ट" टैब पर क्लिक करके, रॉ एक्सएमएल दिखाएं. ये बदलाव करें:
<!-- 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"/>
अब CloudAnchorFragment में एक नया फ़ील्ड जोड़ें:
private Button resolveButton;
पेमेंट का नया तरीका जोड़ने के लिए:
private void onResolveButtonPressed() {
ResolveDialogFragment dialog = new ResolveDialogFragment();
dialog.show(getFragmentMagetActivity().getSupportFragmentManagernager(), "Resolve");
}
onCreateView तरीके में resolveButton को इस तरह शुरू करें:
// 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 तरीका ढूंढें और उसमें बदलाव करें:
private void handleTap(Frame frame, Camera camera) {
// ...
// Find this line.
currentAnchor = hit.createAnchor();
// Add this line right below.
getActivity().runOnUiThread(() -> resolveButton.setEnabled(false));
}
onClearButtonPressed तरीके में एक लाइन जोड़ें:
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 से ऐप्लिकेशन बनाएं और उसे चलाएं. आपको मिटाएं बटन के बगल में, हल करें बटन दिखेगा. हल करें बटन पर क्लिक करने से, नीचे दिखाए गए डायलॉग बॉक्स की तरह एक डायलॉग बॉक्स पॉप-अप होना चाहिए.
अब हल करें बटन दिख रहा है | इस बटन पर क्लिक करने से, यह डायलॉग बॉक्स दिखता है |
|
|
किसी जगह पर टैप करने और ऐंकर को होस्ट करने पर, हल करें बटन बंद हो जाना चाहिए. हालांकि, मिटाएं बटन पर टैप करने से यह बटन फिर से चालू हो जाना चाहिए. ऐसा इसलिए किया गया है, ताकि एक समय में सीन में सिर्फ़ एक ऐंकर मौजूद रहे.
"ऐंकर ठीक करें" डायलॉग बॉक्स से कुछ नहीं होता है, लेकिन अब आप इसे बदल देंगे.
ऐंकर की समस्याएं हल करना
CloudAnchorFragment क्लास में ये तरीके जोड़ें:
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);
}
}
इसके बाद, onResolveButtonPressed तरीके में बदलाव करें:
private void onResolveButtonPressed() {
ResolveDialogFragment dialog = ResolveDialogFragment.createWithOkListener(
this::onShortCodeEntered);
dialog.show(getActivity().getSupportFragmentManager(), "Resolve");
}
Android Studio से ऐप्लिकेशन बनाएं और उसे चलाएं. इसके बाद, यह तरीका अपनाएं:
- किसी सतह पर ऐंकर बनाएं और ऐंकर के होस्ट होने का इंतज़ार करें.
शॉर्ट कोड याद रखें. - ऐंकर मिटाने के लिए, CLEAR बटन दबाएं.
- हल करें बटन दबाएं. पहले चरण में मिला शॉर्ट कोड डालें.
- आपको ऐंकर उसी जगह पर दिखेगा जहां आपने उसे रखा था.
- ऐप्लिकेशन को बंद करें और फिर से खोलें.
- तीसरे और चौथे चरण को दोहराएं. आपको उसी जगह पर एक नया ऐंकर दिखेगा.
शॉर्ट कोड डालना | ऐंकर की समस्या ठीक हो गई है |
|
|
5. डिवाइसों के बीच कॉन्टेंट शेयर करना
आपने देखा कि किसी ऐंकर के Cloud Anchor ID को अपने डिवाइस के लोकल स्टोरेज में कैसे सेव किया जा सकता है. साथ ही, उसी ऐंकर को फिर से बनाने के लिए, उसे बाद में कैसे वापस लाया जा सकता है. हालांकि, Cloud Anchors की पूरी क्षमता का इस्तेमाल तब ही किया जा सकता है, जब Cloud Anchor आईडी को अलग-अलग डिवाइसों के बीच शेयर किया जा सके.
आपका ऐप्लिकेशन, क्लाउड ऐंकर आईडी को कैसे शेयर करता है, यह आप पर निर्भर करता है. स्ट्रिंग को एक डिवाइस से दूसरे डिवाइस पर ट्रांसफ़र करने के लिए, किसी भी चीज़ का इस्तेमाल किया जा सकता है. इस कोडलैब के लिए, ऐप्लिकेशन के इंस्टेंस के बीच क्लाउड ऐंकर आईडी ट्रांसफ़र करने के लिए, Firebase रीयल टाइम डेटाबेस का इस्तेमाल किया जाएगा.
Firebase सेट अप करना
इस ऐप्लिकेशन के साथ इस्तेमाल करने के लिए, आपको अपने Google खाते से Firebase Realtime Database सेट अप करना होगा. Android Studio में Firebase Assistant की मदद से, इसे आसानी से सेट अप किया जा सकता है.
Android Studio में, Tools > Firebase पर क्लिक करें. पॉप-अप होने वाले Assistant पैनल में, Realtime Database पर क्लिक करें. इसके बाद, डेटा सेव करें और वापस पाएं पर क्लिक करें:

अपने Android Studio प्रोजेक्ट को किसी नए या मौजूदा Firebase प्रोजेक्ट से कनेक्ट करने के लिए, Firebase से कनेक्ट करें बटन पर क्लिक करें.

इससे आपको कोई मॉड्यूल चुनने का विकल्प मिलेगा. work मॉड्यूल चुनें:

आपको 'कनेक्ट करना शुरू करें' डायलॉग दिखेगा. इसमें कुछ समय लग सकता है.

अपने Google खाते से साइन इन करें. इसके बाद, Android Studio पर वापस आने तक, अपने ऐप्लिकेशन के लिए Firebase प्रोजेक्ट बनाने के वेब वर्कफ़्लो को पूरा करें.
इसके बाद, Assistant पैनल में जाकर, add the Realtime Database to your app पर क्लिक करें:

पॉप-अप होने वाले डायलॉग बॉक्स में, टारगेट मॉड्यूल ड्रॉप-डाउन से काम चुनें. इसके बाद, बदलाव स्वीकार करें पर क्लिक करें.

यह सुविधा ये काम करेगी:
- अपनी
workडायरेक्ट्री मेंgoogle-services.jsonफ़ाइल जोड़ना - उसी डायरेक्ट्री में मौजूद अपनी
build.gradleफ़ाइल में कुछ लाइनें जोड़ें. - ऐप्लिकेशन बनाएं और उसे चलाएं. ऐसा हो सकता है कि आपको Firebase डेटाबेस के वर्शन नंबर से जुड़ी गड़बड़ी दिखे.
work मॉड्यूल build.gradle फ़ाइल में, यह लाइन ढूंढें और हटाएं (xxxx, नए वर्शन के नंबर के लिए प्लेसहोल्डर है)
dependencies {
...
implementation 'com.google.firebase:firebase-database:xxxx'
इसके बाद, सार्वजनिक ऐक्सेस के लिए नियम कॉन्फ़िगर करें पेज पर दिए गए निर्देशों को पढ़ें. हालांकि, अभी इन निर्देशों का पालन न करें. इन निर्देशों का इस्तेमाल करके, Firebase Realtime Database को दुनिया भर के लोगों के लिए लिखने की अनुमति दें. इससे इस कोडलैब में टेस्टिंग को आसान बनाने में मदद मिलती है:

Firebase कंसोल में जाकर, वह प्रोजेक्ट चुनें जिसे आपने Android Studio प्रोजेक्ट से कनेक्ट किया है. इसके बाद, बनाएं > रीयलटाइम डेटाबेस चुनें.

Realtime Database को कॉन्फ़िगर और सेटअप करने के लिए, डेटाबेस बनाएं पर क्लिक करें:

डेटाबेस की कोई भी जगह चुनें.
अगले चरण में, टेस्ट मोड वाले सुरक्षा नियमों को चुनें. इसके बाद, चालू करें पर क्लिक करें:

अब आपका ऐप्लिकेशन, Firebase डेटाबेस का इस्तेमाल करने के लिए कॉन्फ़िगर हो गया है.
FirebaseManager का इस्तेमाल करना
अब आपको StorageManager को FirebaseManager से बदलना होगा.
Android Studio में, work डायरेक्ट्री में जाकर CloudAnchorFragment क्लास ढूंढें. StorageManager की जगह FirebaseManager का इस्तेमाल करें:
// Find this line.
private final StorageManager storageManager = new StorageManager();
// And replace it with this line.
private FirebaseManager firebaseManager;
onAttach तरीके में firebaseManager को शुरू करें:
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 तरीके में इस तरह बदलाव करें:
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));
});
}
इसके बाद, onHostComplete तरीके में इस तरह बदलाव करें:
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());
}
}
अपना ऐप्लिकेशन बनाएं और उसे चलाएं. आपको पिछले सेक्शन की तरह ही यूज़र इंटरफ़ेस (यूआई) दिखेगा. हालांकि, अब डिवाइस के लोकल स्टोरेज के बजाय, ऑनलाइन Firebase डेटाबेस का इस्तेमाल Cloud Anchor आईडी और छोटे कोड सेव करने के लिए किया जा रहा है.
एक से ज़्यादा उपयोगकर्ताओं के साथ टेस्टिंग करना
एक से ज़्यादा लोगों के साथ इस्तेमाल करने की सुविधा को आज़माने के लिए, दो अलग-अलग फ़ोन इस्तेमाल करें:
- ऐप्लिकेशन को दो डिवाइसों पर इंस्टॉल करें.
- एंकर को होस्ट करने और शॉर्ट कोड जनरेट करने के लिए, एक डिवाइस का इस्तेमाल करें.
- उस शॉर्ट कोड का इस्तेमाल करके, ऐंकर को ठीक करने के लिए दूसरे डिवाइस का इस्तेमाल करें.
आपके पास एक डिवाइस से ऐंकर होस्ट करने, छोटा कोड पाने, और दूसरे डिवाइस पर उस छोटे कोड का इस्तेमाल करके, ऐंकर को उसी जगह पर देखने का विकल्प होना चाहिए!
6. आखिर में खास जानकारी
बधाई हो! आपने यह कोडलैब पूरा कर लिया है!
हमने क्या-क्या कवर किया है
- ARCore SDK का इस्तेमाल करके ऐंकर होस्ट करने और क्लाउड ऐंकर आईडी पाने का तरीका.
- ऐंकर को हल करने के लिए, Cloud Anchor आईडी का इस्तेमाल कैसे करें.
- एक ही डिवाइस पर या अलग-अलग डिवाइसों पर, अलग-अलग एआर सेशन के बीच Cloud Anchor आईडी को सेव और शेयर करने का तरीका.





