请选择平台: Android iOS JavaScript

使用 App Check 保护您的 API 密钥

Firebase App Check 可屏蔽来自合法应用以外的流量,为您的应用对 Google Maps Platform 的调用提供保护。为此,它会检查来自 Play Integrity 等证明提供方的令牌。将应用与 App Check 集成,有助于防范恶意请求,让您不会为未经授权的 API 调用付费。

App Check 是否适合我?

在大多数情况下,建议使用 App Check,但在以下情况下,不需要或不支持 App Check:

  • 您使用原始 Places SDK。App Check 仅支持 Places SDK(新版)。
  • 专用应用或实验性应用。如果您的应用不公开,则不需要使用 App Check。
  • 如果您的应用仅用于服务器到服务器的通信,则不需要使用 App Check。不过,如果与 GMP 通信的服务器由公共客户端(例如移动应用)使用,请考虑使用 App Check 保护该服务器,而不是使用 GMP。
  • App Check 推荐的证明提供程序不会在被其视为存在安全风险或不可信的设备上运行。如果您需要支持此类设备,可以部署自定义认证服务。如需了解详情,请参阅说明。

实施步骤概览

概括来讲,您需要按照以下步骤将应用与 App Check 集成:

  1. 将 Firebase 添加到您的应用。
  2. 添加并初始化 App Check 库。
  3. 添加令牌提供方。
  4. 启用调试功能。
  5. 监控应用请求,并决定是否强制执行。

与 App Check 集成后,您将能够在 Firebase 控制台中查看后端流量指标。这些指标可按请求是否附带有效的 App Check 令牌对其进行细分。如需了解详情,请参阅 Firebase App Check 文档。

当您确定大多数请求都来自合法来源,并且用户已更新到包含 App Check 实现的应用最新版本时,您就可以开启强制执行。强制执行后,App Check 会拒绝所有没有有效 App Check 令牌的流量。

规划 App Check 集成时的注意事项

在规划集成时,请注意以下事项:

  • 我们推荐的认证提供方 Play Integrity 的标准 API 用量层级有每日调用次数限制。 如需详细了解调用限制,请参阅 Google Play Integrity 开发者文档中的设置页面。

    您也可以选择使用自定义认证提供方,不过这是一种高级用例。如需了解详情,请参阅实现自定义 App Check 提供方。

  • 应用的用户在启动时会遇到一些延迟。不过,此后任何定期重新认证都将在后台进行,用户应该不会再遇到任何延迟。启动时的确切延迟时间取决于您选择的认证提供方。

    App Check 令牌的有效时长(存留时间或 TTL)决定了重新证明的频率。此持续时间可在 Firebase 控制台中进行配置。当 TTL 过去大约一半时,系统会重新进行认证。如需了解详情,请参阅适用于您的认证提供方的 Firebase 文档。

将您的应用与 App Check 集成

前提条件和要求

  • 一个已集成 4.1 或更高版本 Places SDK 的应用。
  • 应用的 SHA-256 指纹。
  • 应用的软件包名称。
  • 您必须是 Cloud 控制台中应用的所有者。
  • 您需要从 Cloud 控制台获取应用的项目 ID

第 1 步:将 Firebase 添加到您的应用

按照 Firebase 开发者文档中的说明将 Firebase 添加到您的应用。

第 2 步:添加 App Check 库并初始化 App Check

如需了解如何使用默认认证提供程序 Play Integrity,请参阅使用入门:将 App Check 与 Play Integrity 搭配使用 (Android)。

  1. 如果您还没有将 Places SDK 集成到应用中,请先完成此操作。
  2. 接下来,初始化 App Check 和 Places 客户端。

    // Initialize App Check
    FirebaseApp.initializeApp(/* context= */ this);
    FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
    firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance());
      
    // Initialize Places SDK
    Places.initializeWithNewPlacesApiEnabled(context, API_KEY);
    PlacesClient client = Places.createClient(context);.

第 3 步:添加令牌提供商

初始化 Places API 后,调用 setPlacesAppCheckTokenProvider() 以设置 PlacesAppCheckTokenProvider。

Places.initializeWithNewPlacesApiEnabled(context, API_KEY);
Places.setPlacesAppCheckTokenProvider(new TokenProvider());
PlacesClient client = Places.createClient(context);.

以下是令牌提取器接口的实现示例:

  /** Sample client implementation of App Check token fetcher interface. */
  static class TokenProvider implements PlacesAppCheckTokenProvider {
    @Override
    public ListenableFuture<String> fetchAppCheckToken() {
      SettableFuture<String> future = SettableFuture.create();
      FirebaseAppCheck.getInstance()
          .getAppCheckToken(false)
          .addOnSuccessListener(
              appCheckToken -> {
                future.set(appCheckToken.getToken());
              })
          .addOnFailureListener(
              ex -> {
                future.setException(ex);
              });

      return future;
    }
  }

第 4 步:启用调试功能(可选)

如果您想在本地开发和测试应用,或在持续集成 (CI) 环境中运行应用,可以创建应用的调试 build,该 build 使用调试密钥来获取有效的 App Check 令牌。这可以让您避免在调试 build 中使用真实的证明提供方。

如需在模拟器或测试设备上运行应用,请执行以下操作:

  • 将 App Check 库添加到您的 build.gradle 文件中。
  • 在调试 build 中,将 App Check 配置为使用调试提供程序工厂。
  • 启动应用,系统会创建一个本地调试令牌。将此令牌添加到 Firebase 控制台。
  • 如需了解详情和说明,请参阅 App Check 文档。

如需在 CI 环境中运行应用,请执行以下操作:

  • 在 Firebase 控制台中创建调试令牌,并将其添加到 CI 系统的安全密钥存储区中。
  • 将 App Check 库添加到您的 build.gradle 文件中。
  • 将 CI build 变体配置为使用调试令牌。
  • 在测试类中,使用 DebugAppCheckTestHelper 封装需要 App Check 令牌的代码。
  • 如需了解详情和说明,请参阅 App Check 文档。

第 5 步:监控应用请求,并决定是否强制执行

在开始强制执行之前,您需要确保不会干扰应用的合法用户。为此,请访问 App Check 指标界面,查看应用的流量中有多少百分比是经过验证的、过时的或非法的。如果您发现大部分流量都已通过验证,即可启用强制执行。

如需了解详情和说明,请参阅 Firebase App Check 文档。