android - 使用firebase实时数据库时Android 9上的WebSocketException
问题描述
我正在使用标准方式连接到 Firebase 实时数据库,使用16.1.0
SDK 版本。
问题:
对于 Android 9 以下的设备,连接设置非常好,但对于在移动网络上运行 android 9 的设备,firebase 连接失败。
连接到 firebase 后端似乎需要一段WebSocketException
时间,然后是 SSL 握手异常,日志:
D/WebSocket:ws_16 - WebSocket 错误。com.google.firebase.database.tubesock.WebSocketException:创建安全套接字时出错...
和:
原因:java.net.ConnectException:无法从 /::(端口 42580)连接到 s-usc1c-nss-243.firebaseio.com/(端口 443):连接失败:ETIMEDOUT(连接超时)
详细日志:
D/PersistentConnection:pc_0 - 尝试获取身份验证令牌 D/PersistentConnection:pc_0 - 成功获取令牌,打开连接 D/Connection:conn_19 - 打开连接 D/WebSocket:ws_19 - 连接超时 D/WebSocket:ws_19 - 关闭 D /WebSocket:ws_19 - 关闭自身 D/Connection:conn_19 - 实时连接失败 D/Connection:conn_19 - 关闭实时连接 D/PersistentConnection:pc_0 - 由于其他 D/PersistentConnection:pc_0 - 计划连接尝试 D/ConnectionRetryHelper:在 2357 毫秒 D/WebSocket 中安排重试:ws_19 - WebSocket 错误。
Android 9 的 SSL 证书行为已更改,链接,因此我相信这可能是一个问题,即可以从 firebase 端解决 firebase,但不确定。
GitHub问题相同,链接
还有其他人面临这个问题吗?这有可能破解吗?
PS:切换到 WiFi 后一切正常,只是在 P 的连接级别上失败了。
编辑1:
应用程序构建.gradle:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'realm-android'
apply plugin: 'io.fabric'
apply plugin: 'com.google.android.gms.oss-licenses-plugin'
// other standard default config code
dependencies{
implementation deps.firebase.core
implementation deps.firebase.auth
implementation deps.firebase.config
implementation deps.firebase.firestore
implementation deps.firebase.performance
implementation deps.firebase.messaging
implementation deps.firebase.database
}
apply plugin: 'com.google.gms.google-services'
根 build.gradle:
buildscript {
ext.kotlin_version = '1.3.21'
ext.realm_version = '5.8.0'
ext.versions = [
'firebaseCore' : '16.0.8',
'firebaseAuth' : '16.2.0',
'firebaseConfig' : '16.4.0',
'firebasePerf' : '16.2.4',
'firestore' : '18.1.0',
'firebaseMessaging' : '17.4.0',
'firebaseDatabase' : '16.1.0',
]
ext.deps = [
'firebase' : [
'core' : "com.google.firebase:firebase-core:${versions.firebaseCore}",
'auth' : "com.google.firebase:firebase-auth:${versions.firebaseAuth}",
'config' : "com.google.firebase:firebase-config:${versions.firebaseConfig}",
'firestore' : "com.google.firebase:firebase-firestore:${versions.firestore}",
'performance': "com.google.firebase:firebase-perf:${versions.firebasePerf}",
'messaging' : "com.google.firebase:firebase-messaging:${versions.firebaseMessaging}",
'database' : "com.google.firebase:firebase-database:${versions.firebaseDatabase}",
]
]
repositories {
google()
jcenter()
maven { url 'https://maven.fabric.io/public' }
maven { url "http://storage.googleapis.com/r8-releases/raw" }
maven { url "https://jitpack.io" }
maven { url "https://kotlin.bintray.com/kotlinx/" }
}
dependencies {
// r8 tools deps is for CT.
classpath 'com.android.tools:r8:1.3.52'
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "io.realm:realm-gradle-plugin:$realm_version"
classpath 'com.google.gms:google-services:4.2.0'
classpath 'io.fabric.tools:gradle:1.27.1'
classpath 'com.google.android.gms:oss-licenses-plugin:0.9.4'
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://maven.google.com/' }
maven { url "https://jitpack.io" }
}
}
解决方案
推荐阅读
- google-cloud-platform - 如何为每个“记录”类型字段删除 BigQuery 表中的 __key__ 列?
- node.js - Express.js /public 文件夹的 Kubernetes Ingress 重定向
- javascript - 以变量为参数的wordpress简码
- python - Sympy:如何使用第二个量化模块获得简化的换向器?
- c# - Visual Studio 中的项目 GUID
- java - 使用 Fabric8 的 Kubernetes 客户端 API
- python - 如何使用 2 个参考对包含列表的列表进行排序
- amazon-cloudformation - 无法使用依赖于 AWS Glue 中的爬网程序的控制台创建触发器
- python - MS Teams 上的 Python 网络摄像头实时编辑
- ios - LoginKit 在 Snapchat 上进行身份验证后无法返回应用程序