Firebase Firestore:实例初始化后无法调用 useEmulator()

Abh*_*bhi 6 android firebase firebase-tools google-cloud-functions google-cloud-firestore

我正在使用 Firebase Emulator Suite来测试我的 Firebase Cloud Functions,然后再将其部署到生产中。

探索这种方法以从我的 Andriod 设备触发可调用的 firebase 云函数。

我的应用程序在运行时崩溃了。

错误:

java.lang.IllegalStateException:实例已初始化后无法调用 useEmulator()。

错误来源 - FirebaseFirestore.java

/**
   * Modifies this FirebaseDatabase instance to communicate with the Cloud Firestore emulator.
   *
   * <p>Note: Call this method before using the instance to do any database operations.
   *
   * @param host the emulator host (for example, 10.0.2.2)
   * @param port the emulator port (for example, 8080)
   */
  public void useEmulator(@NonNull String host, int port) {
    if (this.client != null) {
      throw new IllegalStateException(
          "Cannot call useEmulator() after instance has already been initialized.");
    }

    this.emulatorSettings = new EmulatedServiceSettings(host, port);
    this.settings = mergeEmulatorSettings(this.settings, this.emulatorSettings);
  }
Run Code Online (Sandbox Code Playgroud)

Firestore使用以下方法注入:(在我的项目中使用Hilt)

@Provides
fun provideFirebaseFirestore(): FirebaseFirestore {

    val firebaseFirestoreSettings = FirebaseFirestoreSettings.Builder()
    firebaseFirestoreSettings.isPersistenceEnabled = false

    val firestore = FirebaseFirestore.getInstance()
    firestore.useEmulator("192.168.1.102", 8080)
    firestore.firestoreSettings = firebaseFirestoreSettings.build()

    return firestore
}
Run Code Online (Sandbox Code Playgroud)

我的疑问是useEmulator()不是FirebaseFirestore.java静态方法。
在创建 Firebase Firestore 实例之前如何调用它?

Joã*_*elo 0

这可能是因为 Firebase 状态在测试之间保持不变。然后针对同一个 firebase 应用程序实例调用 useEmulator 两次,从而引发错误。至少,这就是我在测试期间发生的事情。

检查 firestore 实例中嵌套“主机”属性的方法(在此答案中描述)对我有用。