0

我已经按照 Firebase 文档在我的应用程序中实现了 AppCheck。其中一个视频说,对于 iOS,您只需要安装 SDK,配置就会自动进行。但是,当我回到 AppAttest 的书面文档时,我看到了一些用于初始化的代码,例如:

class YourSimpleAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return AppAttestProvider(app: app)
  }
}

(我想澄清一下我的指标是正确的,并且当我测试我的应用程序时,请求确实伴随着一个有效的令牌)。

我是否必须实施它,如果没有,它的用途是什么?

谢谢!

4

1 回答 1

0

tldr; 将 AppCheck 集成到您的应用程序中可能需要更改一些代码,具体取决于您希望用于生成 AppCheck 令牌的证明提供者。

我如何知道 appcheck 是否正确实施?

如果您能够在 Firebase 控制台中看到请求指标,则表明 AppCheck 已正确实施且正常工作。

其中一个视频说,对于 iOS,您只需要安装 SDK,配置就会自动进行。

默认情况下, AppCheck SDK 将使用 Apple 的 DeviceCheck 作为证明提供者来生成令牌。因此,通过这种方式,配置是自动的。

然而,当我回到 AppAttest 的书面文档时,我看到了一些用于初始化的代码......

Apple 的 AppAttest 是一个不同的证明提供程序,默认情况下不使用。如果您希望 AppCheck 使用 AppAttest 生成令牌,则需要添加代码来配置 AppCheck 以执行此操作。

我是否必须实施它,如果没有,它的用途是什么?

取决于您的用例,我将解释:

AppCheck SDK 使用AppCheckProviders 生成应用检查令牌。

AppCheck从s获取这些AppCheckProvider实例。AppCheckProviderFactory如前所述,AppCheck 默认会使用 DeviceCheck,所以如果AppCheckProviderFactory手动设置为 no,AppCheck 将使用方便实现的DeviceCheckProviderFactory.

AppCheckProviderFactory您可以使用AppCheck.setAppCheckProviderFactory(_:)API设置 AppCheck 。如果您选择这样做,则必须在调用之前FirebaseApp.configure()完成。请参阅以下文档中的示例:

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

因此,要回答您的问题,您是否实现该AppCheckProviderFactory协议取决于AppCheckProvider您希望用于生成应用检查令牌的内容。

如果您希望 AppCheck 使用提供程序或提供程序组合以外的任何提供DeviceCheckProvider程序,则您需要实现AppCheckProviderFactory协议并将 AppCheck 设置为使用已实现的工厂。

s有 4 种类型AppCheckProvider

  1. AppAttestProvider
  2. DeviceCheckProvider
  3. AppCheckDebugProvider
  4. 您作为子类创建的自定义提供程序AppCheckProvider

例如,这是一个示例工厂实现,其中 AppCheck 将在调试模式下使用调试提供程序,如果操作系统版本支持 AppAttest,则使用 AppAttest 提供程序,如果不支持 AppAttest,则回退到使用 DeviceCheck 提供程序。

class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    #if DEBUG
      return AppCheckDebugProvider(app: app)
    #endif


    if #available(iOS 14.0, *) {
      return AppAttestProvider(app: app)
    } else {
      return DeviceCheckProvider(app: app)
    }
  }
}

如您所见,自定义AppCheckProviderFactory允许您精细控制 AppCheck 使用的提供程序。

我希望这回答了你的问题!

于 2022-01-25T02:22:18.950 回答