Google如何通过浏览器链接启动AR Animals ARCore应用?

时间:2019-06-20 14:21:41

标签: arcore ar.js

TL; DR;

Google的新AR animals看上去就像是网络上的AR(例如AR.js8thWall),但实际上是本机ARCore应用程序。轻率的做法是浏览器中的链接(实际上是带有非常模糊的事件处理程序链的按钮)将启动the ARCore app itself,而不会提示用户安装任何东西。 Google如何做到这一点?我也想这样做。

详细信息

最近的Google introduced a search feature,允许用户通过点击搜索信息卡上的链接来view animals in AR

这是真正的平面感应,SLAM跟踪AR,不需要标记。在我自己的手机(运行Android 9的Pixel 2)上查看示例时,位置和角度保真度令人印象深刻。我可以四处移动电话,四处走动,例如,虎脚停留在几英寸内。同样,AR对象具有出色的视觉稳定性,避免了困扰我见过的大多数基于标记的AR.js应用程序的晃动,也避免了我在第八届Wall non-marker examples中看到的中等对象锚定。

作为从事通过网络交付的AR的开发人员,我很好奇他们如何取得如此高质量的结果。他们是否拥有不与THREE.js / ARKit / AR.js开源项目共享的卓越专有技术?

不。通过使用笔记本电脑对手机进行USB远程检查来调试Tiger例子,再加上一些间接的线索,我得出的结论是,它们看起来不错,因为它们不是Web AR,而是使用ARCore的本机AR。 Google不知何故导致用户的手机加载了本机ARCore应用程序(系统日志显示它是ARCore本身作为应用程序启动),而没有任何安装提示。尝试切换到另一个应用程序会导致AR应用程序自动关闭,从而使其难以调试或检查。

Google自己的ARCore文档通常意味着您需要将应用发布到Play商店,才能真正将启用了ARCore的软件交付用户。那么,有人知道Google在这里做什么吗?

所有图片都是我的原创作品

信息卡链接

Info card with link to "View in 3D"

提示向ARCore授予应用权限

Prompt to grant permissions

刚刚使用了ARCore

App use logs

2 个答案:

答案 0 :(得分:2)

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

  

场景查看器是一种身临其境的查看器,可从您的网站启用AR体验。它使Android移动设备用户可以轻松地在其环境中放置,查看Web托管的3D模型并与之交互。

     

要执行此操作,用户所需的全部是具有ARCore 1.9或更高版本的Android设备。大多数Android浏览器均受支持,并且无需与浏览器进行编程集成-只需网页上格式正确的链接即可。

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

感谢您发布此问题。 :)我正在等待此功能,但我不知道它何时发布。

答案 1 :(得分:0)

它通过使用Android的意图URL起作用。

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://好的,这是一个Android Intent URL

  • arvr.google.com/scene-viewer/1.2?[parameters]这是将传递到ARCore应用程序的URL。参数的设置如下:

    • card_content:这是指向要在AR视图底部的信息表上显示的网页的链接。 https://editorconfig.org/
    • file:这是glb格式的3D模型文件。
    • referrer:不确定这是为了什么,可能会进行跟踪。
    • share_text:这将设置您单击共享按钮时共享的文本。 A screenshot showing where the webpage is embedded.
    • sound:要播放的音频文件,格式为og​​g。
    • title:模型的名称,显示在底部的信息表标题中。
  • #Intent;好吧,现在我们进入告诉Android在哪里打开链接的部分。

    • package=com.google.android.googlequicksearchbox;有趣。这将在Google应用而非ARCore应用中打开。 Google习惯于在Google应用中粘贴随机内容,我想这就是其中之一。
    • scheme=https;这意味着开头的URL应该作为https:// URL传递给Google。
    • S.browser_fallback_url=https://arvr.google.com/scene-viewer?[parameters]如果用户没有Google应用,则会打开该URL。
      • 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>