Flutter Firebase Analytics Android:网络上传失败(java.net.ConnectException)

问题描述 投票:0回答:1

我在 Flutter 应用程序中遇到 Firebase Analytics 事件日志记录问题。尽管事件在 iOS 上完美运行,但 Android 设备上不会记录事件。 adb logcat 中出现以下错误消息:

05-27 14:55:08.562 V/FA-SVC (6814): 网络上传失败。稍后会重试。代码,错误:0,java.net.ConnectException:无法连接到 app-measurement.com/[::]:443: btlq.run(:com.google.android.gms@[电子邮件受保护] (190400 -633713831):154)

故障排除:

  • 验证 Firebase 配置: 仔细检查
    GoogleService-Info.plist
    (iOS) 或
    google-services.json
    (Android) 的正确位置、Firebase 中的项目注册,并确保启用 Analytics。
  • 网络连接:通过在不同网络上进行测试确认了稳定的互联网连接。
  • Google Play 服务: 已验证应用程序和设备之间的版本兼容性。
  • 依赖冲突: 使用
    flutter pub outdated
    flutter pub upgrade
    解决了任何冲突。
  • 清理构建: 使用
    flutter clean
    flutter build apk
    清理并重建应用程序。
  • 防火墙/代理:检查是否存在可能阻止连接的任何防火墙或代理限制(如果适用)。
  • 隔离测试: 创建了一个新的 Firebase 项目和一个新的 Flutter 项目,仅使用 Analytics 进行测试。

环境:

  • Flutter 版本:3.19.6 (3.22.1)(如果使用频道,您可以提及两个版本)
  • Google Play 服务:4.3.15
  • 依赖关系:
    • firebase_analytics:^10.10.6
    • firebase_auth:^4.19.6
    • firebase_core:^2.31.1

相关文件:

project/build.gradle

buildscript {
    ext.kotlin_version = '1.9.22'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        // START: FlutterFire Configuration
        classpath 'com.google.gms:google-services:4.4.1'
        // END: FlutterFire Configuration
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

tasks.register("clean", Delete) {
    delete rootProject.buildDir
}

app/build.gradle

plugins {
    id "com.android.application"
    id("com.google.gms.google-services")
    id "kotlin-android"
    id "dev.flutter.flutter-gradle-plugin"
    
}

def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {
    namespace "ro.test.test"
    compileSdkVersion 34
    ndkVersion flutter.ndkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "ro.daredigital.wishmo"
        // You can update the following values to match your application needs.
        // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
        minSdkVersion 24
        targetSdkVersion 34
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        multiDexEnabled true
    }

     signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }
}

flutter {
    source '../..'
}

dependencies {
    // Import the BoM for the Firebase platform
    implementation(platform("com.google.firebase:firebase-bom:33.0.0"))
    // Add the dependency for the Analytics library
    // When using the BoM, you dopn't specify versions in Firebase library dependencies
    implementation("com.google.firebase:firebase-analytics")
}
flutter firebase firebase-analytics
1个回答
1
投票

Android 设备上的 Firebase Analytics 事件日志记录问题(由于

java.net.ConnectException
导致事件无法上传)表明存在网络连接问题。此问题可能是由于多种因素造成的,包括网络配置、权限或 Firebase 设置。以下是帮助排查和解决此问题的几个步骤:

1. 检查互联网权限

确保您的 AndroidManifest.xml 文件包含必要的互联网权限。

<uses-permission android:name="android.permission.INTERNET"/>

2. 查看 Firebase 配置

确保您的 Firebase 配置在您的 Android 项目中正确设置。

  • 验证
    google-services.json
    文件是否正确放置在
    app
    目录中。
  • 确保您已将 Firebase 插件添加到您的
    build.gradle
    文件中:

项目级build.gradle:

buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.3.10' // Use the latest version
    }
}

应用程序级build.gradle:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

// Add dependencies
dependencies {
    implementation 'com.google.firebase:firebase-analytics:21.1.0' // Use the latest version
}

3. 检查网络配置

确保不存在可能阻止访问

app-measurement.com
的网络限制或防火墙设置。

  • 如果您位于公司或学校网络后面,请尝试切换到其他网络,例如移动热点。
  • 确保设备未处于飞行模式或连接受限。

4. 更新依赖关系

确保所有依赖项都是最新的,尤其是 Google Play 服务和 Firebase 库。您可以通过

build.gradle
文件或 Android Studio 中的 SDK 管理器更新它们。

5. 验证设备时间设置

确保设备的日期和时间设置正确。不正确的时间设置可能会导致 SSL/TLS 连接问题,从而可能导致与 Firebase 服务器的连接失败。

6. 检查调试问题

如果您在调试模式下运行应用程序,请尝试在发布模式下运行它,看看问题是否仍然存在。由于额外的调试开销,调试版本有时可能会具有不同的行为。

7. 查看 ADB 日志

继续监视 adb logcat 以获取可能提供其他线索的更详细的错误消息。重点关注 Firebase 相关标签,例如

FA-SVC
FA
Firebase

Logcat 命令示例

adb logcat -s FA FA-SVC Firebase

8. Google Play 服务可用性

确保 Google Play 服务在设备上可用且是最新的。

9. 防火墙和VPN

如果您使用防火墙或 VPN,请尝试暂时禁用它,看看是否可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.