首页 > 解决方案 > 使用firebase实时数据库时Android 9上的WebSocketException

问题描述

我正在使用标准方式连接到 Firebase 实时数据库,使用16.1.0SDK 版本。

问题:

对于 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" }
    }
}

标签: androidfirebasesslfirebase-realtime-databaseandroid-9.0-pie

解决方案


推荐阅读