重新连接到Internet后,Firestore无法检索数据

Mat*_*ult 18 android google-cloud-firestore

我正在使用带有Android SDK(11.6.2)的Firestore,当我的设备离线并重新连接到Internet时,我遇到异常.

请求文档时,firestore失败并出现以下任务异常:

com.google.firebase.firestore.FirebaseFirestoreException:由于客户端处于脱机状态,因此无法获取文档.

但是,设备已连接,我可以在使用Firestore旁边发出网络请求并成功.此错误不一致,有时请求会在重新连接到Internet后立即成功.有时,请求会一次又一次地失败,然后成功,有时在设备重新连接到Internet后超过一分钟.

以下是产生异常的示例请求:

val docRef = firestore.collection("foo").document("bar")
docRef.get().addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("FirestoreSourceSet", "Get document success")
    } else {
        Log.e("FirestoreSourceSet", "Get document error", task.exception)
    }
}
Run Code Online (Sandbox Code Playgroud)

我没有使用Firestore的脱机功能,因此第一次使用setPersistenceEnabled(false)标志初始化FirebaseFirestore实例:

val firestoreSettings = FirebaseFirestoreSettings.Builder()
    .setPersistenceEnabled(false)
    .build()

val firestore = FirebaseFirestore.getInstance().apply {
    this.firestoreSettings = firestoreSettings
}
Run Code Online (Sandbox Code Playgroud)

为什么即使设备在线,Firestore也会返回此错误?我是否遗漏了Firestore配置中可以避免此错误的内容?

我尝试将Firebase升级到11.8.0版本,但我遇到了相同的行为.

日志

这些是在离开飞行模式后尝试使用Firestore(以文档提取开始)同步某些数据时的日志:https://pastebin.com/xDMG2Pzj

在第一次Firestore呼叫之前,网络已经可用,因为我等待Wifi结算,并在继续使用Firestore之前使用Android 的ConnectivityManager进行检查.

多次调用是因为每次出现错误时我都会使用按钮手动重试,直到成功检索到文档.

日志的第一行是当我将飞机模式设置为1时关闭Firestore流.

编辑:问题

Firebase没有公共跟踪器,但我使用他们的报告工具报告了这个问题,并制作了一个重现该问题的回购.

他们承认这个问题,但无法提供ETA,所以我们必须等待:

如果我们发布修复程序,我们将在发布说明页面中公布.

这仍然是firestore-core 17.0.4的一个问题

Ale*_*amo 5

官方文档

要使用离线持久性,您无需对用于访问 Cloud Firestore 数据的代码进行任何更改。启用离线持久性后,Cloud Firestore 客户端库会自动管理在线和离线数据访问,并在设备重新在线时同步本地数据。

初始化 Cloud Firestore 时,您可以启用或禁用离线持久性。因此,当使用以下代码行时:

val firestoreSettings = FirebaseFirestoreSettings.Builder()
    .setPersistenceEnabled(false)
    .build()
Run Code Online (Sandbox Code Playgroud)

您实际上将持久性设置为false,您正在禁用此功能。要解决这个问题,只需删除这行代码。Firestore.setPersistenceEnabled(true)默认有。

  • 我不想使用 Firestore 的持久性,因为我已经在使用本地数据库来存储数据,因此显式禁用。如果我尝试从 Firestore 检索数据,当设备处于离线状态时,我不会收到错误消息。我的问题是在重新连接到 Internet 后,当设备在线时出现“无法获取文档,因为客户端离线”错误。 (6认同)

Mat*_*ult 2

Cloud Firestore 版本 17.1.5 已修复此问题。

请参阅官方变更日志https://firebase.google.com/support/release-notes/android

Cloud Firestore 现在可以更快地从不良网络状态中恢复。


使用我的18.0.0版本的复制项目,这个问题确实不存在。

  • 版本 20.1.0 与问题中描述的行为完全相同。我认为这根本就不是固定的。 (8认同)