尝试在 cloud_anchor_java
和 persistent_cloud_anchor_java
示例应用中托管和解析云锚点。
您应使用哪个示例应用?
云锚点是托管在 ARCore API 云端点上的锚点。借助此 API,用户可以在同一应用中共享体验。永久性云锚点是一种可以托管 24 小时以上的云锚点。
persistent_cloud_anchor_java
是协作项目用例的实现。它使用无密钥授权对 ARCore API 调用进行授权。由于它不使用 Firebase 后端在设备之间共享云锚点 ID,因此启动和运行起来容易得多。cloud_anchor_java
是多人游戏用例的实现。它使用 API 密钥向 ARCore API 调用授权。
前提条件
要求
硬件
- 一台支持 ARCore 的设备,且该设备安装了最新版本的面向 AR 的 Google Play 服务
- 一根用于将设备连接到开发机器的 USB 线
软件
- Android Studio 3.0 或更高版本,以及 Android SDK 平台 7.0(API 级别 24)或更高版本
- ARCore SDK for Android,您可以通过以下两种方式之一获取:
- 从 GitHub 下载并将其解压缩到您的机器上
- 使用以下命令克隆代码库:
git clone https://github.com/google-ar/arcore-android-sdk.git
在 Android Studio 中打开示例应用
ARCore SDK 提供了 cloud_anchor_java
和 persistent_cloud_anchor_java
示例应用来演示云锚点功能。请按照以下步骤在 Android Studio 中打开应用。
持久云锚点
在 Android Studio 中,点击 Open。
前往 arcore-android-sdk 目录在计算机上的存储位置。请勿打开整个 SDK 文件夹。请改为转到 samples > persistent_cloud_anchor_java,然后点击 Open。
云锚点
在 Android Studio 中,点击 Open。
前往 arcore-android-sdk 目录在计算机上的存储位置。请勿打开整个 SDK 文件夹。请改为转到 samples > cloud_anchor_java,然后点击 Open。
设置云锚点 ID 共享
云锚点 ID 是用于标识托管的云锚点的字符串。它们用于解析或渲染附加到托管锚点的 3D 对象。
持久云锚点
云锚点 ID 共享是在应用中本地维护的。您无需在此处执行任何操作。
云锚点
cloud_anchor_java
示例应用使用 Firebase 的 Realtime Database 在设备之间共享云锚点 ID。您可以在自己的应用中使用不同的解决方案。
- 手动将 Firebase 添加到您的应用。
cloud_anchor_java
软件包名称为com.google.ar.core.examples.java.cloudanchor
。您可以在main/AndroidManifest.xml
中找到它。 - 下载您在将 Firebase 添加到您的应用时生成的
google-services.json
文件。 - 使用 Firebase 创建 Realtime Database。
- 在 Android Studio 中,将
google-services.json
文件添加到项目的app
目录中。
授权 ARCore API 调用
授权调用 ARCore API 以为您的应用托管和解析云锚点。请按照在 Google Cloud 上使用 ARCore API 中的步骤操作,针对持久性云锚点使用无密钥授权,或针对云锚点使用 API 密钥授权。
构建和运行示例应用
持久云锚点
运行应用
- 确保您的设备已启用开发者选项和 USB 调试。
- 通过 USB 将设备连接到开发机器。
- 在 Android Studio 中,选择您的设备作为部署目标,然后点击 Run。
persistent_cloud_anchor_java
应在您的设备上启动,并提示 ARCore 检测设备摄像头前方的平面。
如果 Google Cloud 授权失败,请参阅问题排查步骤。
放置锚点
- 在应用开始检测平面后,点按您的屏幕即可在检测到的平面之一上放置锚点。
- 点按 HOST 按钮,以托管已放置的锚点。这将向 ARCore API 发送托管请求,其中包含表示锚点相对于附近可视特征的位置的数据。
成功的托管请求会在所放置的位置创建一个锚点,并为其分配一个云锚点 ID。如果主持人请求成功,应用应显示房间代码。您可以在任何设备上使用此代码访问此会议室之前托管的锚点。
解析锚点
- 点按解决并输入之前返回的房间代码,即可访问此聊天室中托管的锚点。这将向 ARCore API 发送一个解析请求,后者会返回房间中当前托管的所有锚点的 ID。
persistent_cloud_anchor_java
将使用这些 ID 来渲染附加到托管锚点的 3D 对象。
云锚点
运行应用
- 确保您的设备已启用开发者选项和 USB 调试。
- 通过 USB 将设备连接到开发机器。
- 在 Android Studio 中,选择您的设备作为部署目标,然后点击 Run。
cloud_anchor_java
应在您的设备上启动,并提示 ARCore 检测设备摄像头前方的平面。
错误:com.google.firebase.database.DatabaseException: Failed to get FirebaseDatabase instance: Specify DatabaseURL within FirebaseApp or from your getInstance
如果您遇到此错误,请确保 google-services.json
中存在 firebase_url
属性。确保已创建 Realtime Database 并下载 google-services.json
,即可获得此属性的正确值。
放置锚点
- 在应用开始检测平面后,点按您的屏幕即可在检测到的平面之一上放置锚点。
- 点按 HOST 按钮,以托管已放置的锚点。这将向 ARCore API 发送托管请求,其中包含表示锚点相对于附近可视特征的位置的数据。
成功的托管请求会在所放置的位置创建一个锚点,并为其分配一个云锚点 ID。如果主持人请求成功,应用应显示房间代码。您可以在任何设备上使用此代码访问此会议室之前托管的锚点。
解析锚点
- 点按解决并输入之前返回的房间代码,即可访问此聊天室中托管的锚点。这将向 ARCore API 发送一个解析请求,后者会返回房间中当前托管的所有锚点的 ID。
cloud_anchor_java
将使用这些 ID 来渲染附加到托管锚点的 3D 对象。
后续步骤
- 参考“带永久性云锚点的 ARCore 云锚点”Codelab,创建一个云锚点应用。
- 阅读云锚点开发者指南,了解如何在应用中整合云锚点。
- 使用 Cloud Anchors Management API 在 ARCore 应用之外管理云锚点。