firebase / firebase/firebase-android-sdk

Firestore network instability and silent write failures after upgrading Firebase BoM

Open
#7,953 2 comments 0 reactions 1 assignee Claimed by @MarkDuckworth View on GitHub
api: firestore
Dominant language
Java
Stars
2.6k
Forks
710
Avg merge
2d 9h
Merged PRs (30d)
31

Description

### Context

I'm using Firebase across Android and iOS:
- Android & iOS via a fork of the GitLive Firebase Kotlin SDK
- Some services (e.g. App Check) are used natively
- All platforms use the same Firebase BoM version

Previously stable setup:
- Firebase BoM: `33.2.0`
- No crashes, no network issues, no Sentry reports

Recent upgrades:
- Kotlin → `2.3.20`
- AGP → `9.0.1`
- Firebase BoM → tested `33.15.0` and `34.9.0`

Test environment:
- Real Samsung device (fully updated, Android 15)

### The issue

After upgrading, I started seeing frequent network-related errors:

#### 1. SSL / NativeCrypto errors
```
2026-03-23 15:57:48.197 28596-28745 NativeCrypto com.embedded_factory.typr.dev.debug V Read error: ssl=0xb40000760076b398: I/O error during system call, Software caused connection abort
2026-03-23 15:57:48.199 28596-28742 NativeCrypto com.embedded_factory.typr.dev.debug V Write error: ssl=0xb40000760076b398: I/O error during system call, Broken pipe
2026-03-23 15:57:48.200 28596-28742 NativeCrypto com.embedded_factory.typr.dev.debug V SSL shutdown failed: ssl=0xb40000760076b398: I/O error during system call, Success
```

#### 2. gRPC resolution failures
```
2026-03-23 16:33:09.971 32172-6913 ManagedChannelImpl com.embedded_factory.typr.dev.debug W [{0}] Failed to resolve name. status={1}
2026-03-23 16:33:11.706 32172-6913 ManagedChannelImpl com.embedded_factory.typr.dev.debug W [{0}] Failed to resolve name. status={1}
2026-03-23 16:33:13.811 32172-6913 ManagedChannelImpl com.embedded_factory.typr.dev.debug W [{0}] Failed to resolve name. status={1}
2026-03-23 16:33:17.598 32172-6913 ManagedChannelImpl com.embedded_factory.typr.dev.debug W [{0}] Failed to resolve name. status={1}
2026-03-23 16:33:25.187 32172-6913 ManagedChannelImpl com.embedded_factory.typr.dev.debug W [{0}] Failed to resolve name. status={1}
```

#### 3. Sentry exceptions
```
javax.net.ssl.SSLException: Read error: ssl=0xb400007600771398: I/O error during system call, Software caused connection abort
at com.google.android.gms.org.conscrypt.NativeCrypto.SSL_read(:com.google.android.gms@261035035@26.10.35 (260400-885717106))
at com.google.android.gms.org.conscrypt.NativeSsl.read(:com.google.android.gms@261035035@26.10.35 (260400-885717106):34)
at com.google.android.gms.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(:com.google.android.gms@261035035@26.10.35 (260400-885717106):61)
at okio.internal.DefaultSocket$SocketSource.read(DefaultSocket.kt:124)
at okio.RealBufferedSource.read(RealBufferedSource.kt:215)
at okhttp3.internal.connection.Exchange$ResponseBodySource.read(Exchange.kt:346)
at okio.RealBufferedSource.request(RealBufferedSource.kt:232)
at okio.RealBufferedSource.require(RealBufferedSource.kt:225)
at okio.RealBufferedSource.readByte(RealBufferedSource.kt:235)
at okhttp3.internal.ws.WebSocketReader.readHeader(WebSocketReader.kt:125)
at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.kt:108)
at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.kt:317)
at okhttp3.internal.ws.RealWebSocket$connect$1.onResponse(RealWebSocket.kt:204)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:576)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1154)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:652)
at java.lang.Thread.run(Thread.java:1564)
```

### Additional Concern

With Firebase BoM `34.9.0`, I started observing:

- Firestore documents **not being written**
- Silent failures (no clear exception surfaced)

This is new and did not happen on `33.2.0`.

### Attempted Mitigation

Given Android 15 background network restrictions:
https://developer.android.com/about/versions/15/behavior-changes-all#background-network-access

I implemented explicit Firestore network lifecycle handling:

```kotlin
object FirebaseNetworkLifecycle : DefaultLifecycleObserver {

fun register() {
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
}

override fun onStart(owner: LifecycleOwner) {
Napier.d("FirebaseNetworkLifecycle: enabling network")
FirebaseFirestore.getInstance().enableNetwork()
}

override fun onStop(owner: LifecycleOwner) {
Napier.d("FirebaseNetworkLifecycle: disabling network")
FirebaseFirestore.getInstance().disableNetwork()
}
}
```

Result: No real improvement

### Observations

Errors often appear:
- Shortly after app backgrounding, but also during normal foreground usage
Looks like:
- gRPC channel instability
- WebSocket / streaming interruptions
- Could be related to:
- Android 15 network policy changes
- gRPC / OkHttp upgrade inside Firebase BoM
- TLS / Conscrypt behavior changes

### Questions

- Is this a known issue with recent Firebase BoM versions (33.15+ / 34.x)?

Any known incompatibility with:
- Kotlin 2.3.x
- AGP 9.x
- Android 15 networking changes?

Has anything changed in:
- Firestore streaming / WebSocket handling?
- gRPC DNS resolution?
- Are there recommended configurations or workarounds for Android 15?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.