获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

保护您的 Firebase ML Android 应用的 Cloud 凭据

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

如果您的 Android 应用使用 Firebase ML 的云 API 之一,那么在您将应用启动到生产环境之前,您应该采取一些额外的步骤来防止未经授权的 API 访问。

对于您的生产应用程序,您将确保只有经过身份验证的客户端才能访问云服务。 (请注意,只有非 root 设备才能使用所述方法进行身份验证。)

然后,您将创建一个仅用于调试的 API 密钥,以便在测试和开发期间使用该密钥。

1. 向 Firebase 注册您的生产应用

首先,向 Firebase 注册您的生产应用。

  1. 确保您拥有应用的 SHA-1 签名。请参阅验证您的客户端以了解如何操作。

  2. 转到 Firebase 控制台中的项目设置,然后选择设置选项卡。

  3. 向下滚动到您的应用卡片,然后选择您的 Android 应用。

  4. 将应用的 SHA-1 签名添加到应用的信息中。

2. 限制 API 密钥的范围

接下来,配置您现有的 API 密钥以禁止访问 Cloud Vision API:

  1. 打开 Google Cloud Console 的凭据页面。出现提示时,选择您的项目。

  2. 对于列表中的每个现有 API 密钥,打开编辑视图。

  3. API 限制部分,选择Restrict key ,然后将您希望 API 密钥有权访问的所有 API 添加到列表中。确保包含 Cloud Vision API。

    当您配置 API 密钥的API 限制时,您明确声明了该密钥可以访问的 API。默认情况下,当API 限制部分选择了不限制密钥时,API 密钥可用于访问为项目启用的任何 API。

现在,您现有的 API 密钥将不会授予对云 ML 服务的访问权限,但每个密钥将继续适用于您添加到其API 限制列表中的任何 API。

请注意,如果您将来启用任何其他 API,则必须将它们添加到适用 API 密钥的API 限制列表中。

3. 创建和使用调试专用 API 密钥

最后,创建一个仅用于开发的新 API 密钥。 Firebase ML 可以使用此 API 密钥在无法进行应用身份验证的环境中访问 Google Cloud 服务,例如在模拟器上运行时。

  1. 创建用于开发的新 API 密钥:

    1. 打开 Google Cloud Console 的凭据页面。出现提示时,选择您的项目。

    2. 单击创建凭据 > API 密钥并记下新的 API 密钥。此密钥允许未经身份验证的应用程序访问 API,因此请将此密钥保密

  2. 为确保新的调试 API 密钥不会随您发布的应用泄露,请在仅用于调试构建的 Android 清单文件中指定调试 API 密钥:

    1. 如果您还没有调试清单,请通过单击文件 > 新建 > 其他 > Android 清单文件并从目标源集中选择debug来创建一个。

    2. 在调试清单中,添加以下声明:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. 在您的应用中,将 Firebase ML 配置为使用证书指纹匹配来在生产环境中对您的客户端进行身份验证,并仅在调试版本中使用 API 密钥(调试密钥):

    Java

    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

    Kotlin+KTX

    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)

下一步

有关在使用其他 Firebase 功能时准备启动应用的信息,请参阅启动清单