在 Google Cloud 上使用 ARCore API

选择平台: <ph type="x-smartling-placeholder"></ph>

ARCore 功能,如地理空间 API云锚点使用 ARCore API 托管在 Google Cloud 上。使用这些功能时,您的应用 使用凭据访问 ARCore API 服务。

本快速入门将介绍如何设置您的应用,以使其能够运行 与托管在 Google Cloud 上的 ARCore API 服务进行通信。

创建新的 Google Cloud 项目或使用现有项目

如果您已有项目,请选择该项目。

转到“项目选择器”

如果您还没有 Google Cloud 项目,请创建一个。

创建新项目

启用 ARCore API

如需使用 ARCore API,您必须在项目中启用它。

启用 ARCore API

设置授权方法

Unity 应用可使用两种不同的 ID 与 ARCore API 通信, 授权方法:无密钥授权, 推荐方法和 API 密钥授权:

  • 在 Android 中,无密钥授权使用应用软件包名称的组合 和签名密钥的指纹,对您的应用进行授权。

    在 iOS 上,无密钥授权使用签名的令牌来控制对 API 的访问。这个 方法要求您拥有的服务器来签署令牌并控制 该 API。

  • API 密钥是用于标识 Google Cloud 项目的字符串。API 密钥是 通常被视为不安全,因为它们通常可供客户端访问。 考虑使用无密钥授权与 ARCore API 通信。

无密钥

如需使用无密钥身份验证为您的应用授权,请创建 OAuth 2.0 客户端 。

确定签名密钥指纹

OAuth 2.0 客户端 ID 使用应用的签名密钥指纹来标识您的 应用。

如何获取调试签名指纹

在运行或调试项目时,Android SDK 工具会自动签署 调试应用。

使用以下命令获取调试证书指纹。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph>
Mac/Linux
keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore
Windows
keytool -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

keytool 实用程序会提示您输入密钥库的密码。通过 调试密钥库的默认密码为 androidkeytool 实用程序 将指纹输出到终端。例如:

   Certificate fingerprint: SHA1: <strong>DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09

如何从密钥库获取签名指纹

如果您有密钥库文件,请使用 keytool 实用程序确定指纹。

keytool -list -v -alias your-key-name -keystore path-to-production-keystore

然后,keytool 实用程序会将指纹输出到终端。例如:

   Certificate fingerprint: SHA1: DA:39:A3:EE:5E:6B:4B:0D:32:55:BF:EF:95:60:18:90:AF:D8:07:09

如何从 Play 应用签名功能获取应用的签名密钥

使用 Play 应用签名时: Google 负责管理您应用的签名密钥,并使用该密钥为您的 APK 签名。 此密钥应该用于签名指纹。

  1. 在 Google Play 管理中心的“应用签名”页面中,滚动到应用签名密钥证书
  2. 使用 SHA-1 证书指纹

创建 OAuth 2.0 客户端 ID

针对前面步骤中每个适用的签名密钥,在 Google Cloud 项目的凭据。

  • 在 Google Cloud 中,打开“凭据”页面。

    凭据

  • 点击创建凭据,然后从菜单中选择 OAuth 客户端 ID

  • 填写必填字段,如下所示:

    • Application type:选择 Android
    • 软件包名称:使用 AndroidManifest.xml 中声明的软件包名称。
    • SHA-1 证书指纹:使用在前面步骤中获得的指纹。
  • 创建

添加所需的库

  1. com.google.android.gms:play-services-auth:16+ 添加到应用的依赖项中。
  2. 如果您使用代码缩减功能, 将其添加到应用的 build.gradle 文件中:

    buildTypes {
      release {
        ...
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      }
    }
    
  3. 将以下内容添加到应用的 proguard-rules.pro 文件中:

    -keep class com.google.android.gms.common.** { *; }
    -keep class com.google.android.gms.location.** { *; }
    -keep class com.google.android.gms.auth.** { *; }
    -keep class com.google.android.gms.tasks.** { *; }
    

您的应用现已配置为使用无密钥身份验证。

无密钥

ARCore 支持在 iOS 中使用 (JSON Web 令牌)。令牌必须由 Google 服务账号。

要为 iOS 生成令牌,您的服务器上必须有端点 应满足以下要求:

  • 端点必须由您自己的授权机制加以保护。

  • 端点每次都必须生成一个新令牌,以便:

    • 每个用户都会获得一个唯一的令牌。
    • 令牌不会立即过期。

创建服务账号和签名密钥

请按照以下步骤创建 Google 服务账号和签名密钥:

  1. 在 Google Cloud 中,打开“凭据”页面。
    凭据
  2. 点击创建凭据 >服务账号
  3. 服务账号详情下,输入新账号的名称,然后点击 创建
  4. 在“服务账号权限”页面上,转到选择角色下拉列表。 选择服务账号 >Service Account Token Creator,然后点击 继续。
  5. 向用户授予访问此服务账号的权限页面上,点击“完成”。
  6. 凭据页面上 页面上,找到“服务账号”部分,然后点击相应账号的名称 创建的新实例
  7. 服务账号详情页面上,向下滚动到“密钥”部分,然后 选择添加键 >创建新密钥
  8. 选择 JSON 作为密钥类型,然后点击创建

    此操作会将包含私钥的 JSON 文件下载到您的计算机。实体店 将下载的 JSON 密钥文件保存在安全位置。

在服务器上创建令牌

要在您的服务器上创建新令牌 (JWT),请使用标准 JWT 库 以及您从新服务账号安全下载的 JSON 文件。

在开发机器上创建令牌

要在开发机器上生成 JWT,请使用以下命令 oauth2l 命令:

oauth2l fetch --cache "" --jwt --json $KEYFILE --audience "https://arcore.googleapis.com/"

如需执行以下操作,必须使用 --cache 标志指定空的缓存位置: 以确保每次都会生成不同的令牌。确保剪掉 所生成的字符串。多余的空格或换行符会导致 API 拒绝该令牌

对令牌签名

您必须使用 RS256 算法和以下声明来对 JWT 进行签名:

  • iss - 服务账号电子邮件地址。
  • sub - 服务账号电子邮件地址。
  • iat - 生成令牌的 Unix 纪元时间(以秒为单位)。
  • exp - iat + 3600(1 小时)。令牌到期时的 Unix 纪元时间。 (以秒为单位)。
  • aud - 受众群体。必须设置为 https://arcore.googleapis.com/

JWT 有效负载中不需要非标准声明, uid 声明有助于识别相应用户。

如果您使用其他方法来生成 JWT(例如使用 Google API 时,请务必使用声明对您的 JWT 进行签名 部分。首先,确保受众群体正确无误。

在 ARCore 会话中传递令牌

  1. 确保将 iOS 身份验证策略设置为 AuthenticationToken。在 Unity 中,转到 Edit(修改)>项目设置 > XR 插件管理 > ARCore 扩展程序。在 iOS 身份验证策略下拉菜单中 菜单中选择 Authentication Token(身份验证令牌)选项。
  2. 获取令牌后,使用以下命令将其传递给 ARCore 会话 ARAnchorManager.SetAuthToken():

    // Designate the token to authorize ARCore API calls
    // on the iOS platform. This should be called each time the application's token is refreshed.
    ARAnchorManager.SetAuthToken(authToken);
    

您的应用现已配置为使用无密钥身份验证。

将令牌传递到会话中时,请注意以下事项:

  • 如果您使用 API 密钥创建会话,ARCore 会忽略 令牌并记录错误。

    如果您不再需要该 API 密钥,请在 Google Developers Google Play 管理中心,并将它从您的 应用。

  • ARCore 会忽略包含空格或特殊字符的词元。

  • 令牌通常会在一小时后过期。如果您的网站有可能 令牌在使用过程中可能会过期,获取新令牌并将其传递给 API。

API 密钥

  1. 在 Google Cloud 中,打开“凭据”页面。
    凭据
  2. 选择创建凭据,然后从菜单中选择 API 密钥
    “已创建的 API 密钥”对话框会显示您新创建的密钥的字符串。
  3. 在 Unity 中,转到 Edit(修改)>项目设置 >XR 插件管理 > ARCore 扩展程序。对于每个目标平台(Android、iOS),在其 身份验证策略下拉菜单中,选择 API 密钥选项。然后, 在 API 密钥字段中插入您的 API 密钥。

  4. 查看有关 API 密钥限制的文档 保护您的 API 密钥。

您的应用现已配置为使用 API 密钥。

后续步骤

配置授权后,请查看以下使用 :