Как Google запускает приложение AR Animals ARCore по ссылке в браузере?

TL;ДР;

Новые AR животные от Google выглядят так, как будто они являются AR в Интернете (например, AR.js или 8-я стена), но на самом деле являются родными приложениями ARCore. Ловкость рук заключается в том, что ссылка в браузере (на самом деле кнопка с очень запутанной цепочкой обработчиков событий) запускает само приложение ARCore без каких-либо запросов пользователю что-либо установить. Как Google это делает? Я тоже хочу это сделать.

Деталь

Недавно Google введена функция поиска, который позволяет пользователям смотреть животных в дополненной реальности, щелкнув ссылку на карточке с информацией о поиске.

Это настоящая дополненная реальность с распознаванием плоскости, отслеживанием SLAM, маркеры не требуются. Просматривая примеры на моем собственном телефоне (Pixel 2 под управлением Android 9), точность расположения и угла обзора впечатляет. Я могу перемещать телефон, ходить, и лапа тигра (например) остается на якоре в пределах нескольких дюймов. Точно так же объекты AR имеют отличную визуальную стабильность, избегая дрожания, которое преследует большинство приложений AR.js на основе маркеров, которые я видел, или посредственной привязки объектов, которую я вижу в 8th Wall немаркерПримеры.

Как разработчику, работающему над доставкой дополненной реальности через Интернет, мне очень любопытно, как они добились такого высококачественного результата. Есть ли у них гораздо более совершенные проприетарные технологии, которыми они не делятся с проектами с открытым исходным кодом THREE.js / ARKit / AR.js?

Нет. Выполнив отладку примера с тигром, используя удаленную USB-проверку моего телефона с моего ноутбука, а также некоторые косвенные подсказки, я пришел к выводу, что они выглядят так хорошо, потому что это не веб-AR, а нативная AR с использованием ARCore. Каким-то образом Google заставляет телефон пользователя загружать собственное приложение ARCore (системные журналы показывают, что сам ARCore запускается как приложение) без какого-либо запроса на установку. Попытка переключиться на другое приложение приводит к автоматическому закрытию приложения дополненной реальности, что затрудняет его отладку или проверку.

Собственные документы Google ARCore обычно подразумевают, что вам необходимо опубликовать приложение в магазине Play, чтобы фактически получить программное обеспечение с поддержкой ARCore в руки пользователей. Итак, кто-нибудь знает, как Google делает то, что они делают здесь?

Все изображения мои авторские работы

Ссылка на информационную карту:

Как Google запускает приложение AR Animals ARCore по ссылке в браузере?

Запрос на предоставление разрешений приложения для ARCore:

Как Google запускает приложение AR Animals ARCore по ссылке в браузере?

ARCore был только что использован:

Как Google запускает приложение AR Animals ARCore по ссылке в браузере?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
2 294
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

https://developers.google.com/ar/develop/java/scene-viewer

Scene Viewer is an immersive viewer that enables AR experiences from your website. It lets Android mobile device users easily place, view, and interact with web-hosted 3D models in their environment.

To do this, all a user needs is an Android device that has ARCore 1.9 or later. Most Android browsers are supported, and no programmatic integration with a browser is necessary -- only properly-formatted links on a web page.

<model-viewer ar alt = "A 3D model of an astronaut." src = "Astronaut.gltf"></model-viewer>

Спасибо за размещение этого вопроса. :) Я ждал эту функцию, но не знал, когда она выйдет.

Стоит отметить, что <model-viewer> также работает с устройствами с поддержкой ARKit, запуская приложение AR View, встроенное в iOS 12+.

Saico 08.07.2019 20:22

Он работает с использованием URL-адресов намерений Android.

intent://arvr.google.com/scene-viewer/1.2?file=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/model.glb&title=Giant%20panda&referrer=google.com:ANIMALS:kp_carousel&sound=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/Bear_Panda_Giant_Unisex_Adult.ogg&card_content=https://arvr.google.com/searchar/infocard?data%3DCg0vZy8xMWo1ZjVkbms0EAE%26hl%3Den-US&share_text=See%20a%20life-sized%20animal!%20Search%20%22Giant%20panda%22%20on%20Google%20and%20tap%20%22View%20in%203D.%22%20https://www.google.com/search?q%3DGiant%2Bpanda%26hl%3Den-US%26stick%3DH4sIAAAAAAAAAFPi0M_VNzBOyjJ8xGjMLfDyxz1hKa1Ja05eY1Th4grOyC93zSvJLKkUEuNig7J4pLi44Jp4FrFyu2cm5pUoFCTmpSQCADr-Ul5OAAAA#Intent;package=com.google.android.googlequicksearchbox;scheme=https;S.browser_fallback_url=https://arvr.google.com/scene-viewer?file=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/model.glb&title=Giant%20panda&referrer=google.com:ANIMALS:kp_carousel&sound=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/Bear_Panda_Giant_Unisex_Adult.ogg;end;

Перейти к концу для генератора.

Давайте разберем формат URL.

  • intent:// Хорошо, это URL намерения Android

  • arvr.google.com/scene-viewer/1.2?[parameters] Это URL-адрес, который будет передан приложению ARCore. Параметры работают следующим образом:

    • card_content: это ссылка на веб-страницу, которая отображается на информационном листе в нижней части представления AR. A screenshot showing where the webpage is embedded.
    • file: Это файл 3D-модели в формате glb.
    • referrer: Не знаю, для чего это, наверное, для отслеживания.
    • share_text: устанавливает текст, которым вы делитесь, когда вы нажимаете кнопку «Поделиться».
    • sound: аудиофайл для воспроизведения в формате ogg.
    • title: Имя модели, указанное в заголовке информационного листа внизу.
  • #Intent; Хорошо, теперь мы подходим к той части, где мы сообщаем Android, где открыть ссылку.

    • package=com.google.android.googlequicksearchbox; Интересно. Это открывается в приложении Google, а не в приложении ARCore. У Google есть привычка вставлять случайные вещи в приложение Google, и я думаю, что это одна из них.
    • scheme=https; Это означает, что URL-адрес в начале должен быть передан в Google как URL-адрес https://.
    • S.browser_fallback_url=https://arvr.google.com/scene-viewer?[parameters] Этот URL будет открыт, если у пользователя нет приложения Google.
      • file: См. выше.
      • title: См. выше.
      • sound: См. выше.
      • referrer: См. выше.
  • ;end; Конец URL здесь.

urlform.oninput=()=>{
out.textContent=`intent://arvr.google.com/scene-viewer/1.2?file=${encodeURIComponent(file.value)}&title=${encodeURIComponent(title.value)}&referrer=&sound=${encodeURIComponent(sound.value)}&card_content=${encodeURIComponent(card.value)}&share_text=${encodeURIComponent(share.value)}#Intent;package=com.google.android.googlequicksearchbox;scheme=https;S.browser_fallback_url=https://arvr.google.com/scene-viewer?file=${encodeURIComponent(file.value)}&title=${encodeURIComponent(title.value)}&referrer=&sound=${encodeURIComponent(sound.value)};end;`
}
#urlform{
display:grid;
grid-gap:9px;
}
<form id = "urlform">
<input type = "text" placeholder = "URL of model file (GLB)" id = "file">
<input type = "text" placeholder = "Model name" id = "title">
<input type = "text" placeholder = "URL of sound file (OGG)" id = "sound">
<input type = "text" placeholder = "URL of card webpage (HTML)" id = "card">
<textarea placeholder = "Share text" id = "share"></textarea>
</form>
<div id = "out"></div>

Другие вопросы по теме