You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI集成FirebaseFirestore遇网络连接错误求助

Firebase Firestore 网络连接警告排查(数据可正常获取但出现日志错误)

我多次搜索未找到解决方案,作为刚接触Xcode开发SwiftUI的新手,我写了一个简单测试示例,使用Xcode 15.4、Firebase 11.1.0、iOS 17.5模拟器(iPhone 15 Pro Max)测试,目前能正常从数据库获取数据,但出现如下错误日志:

WARNING: All log messages before absl::InitializeLog() is called are written to STDERR I0000 00:00:1724935720.773638 111338 config.cc:230] gRPC experiments enabled: call_status_override_on_cancellation, http2_stats_fix, monitoring_experiment, pick_first_new, trace_record_callops, work_serializer_clears_time_cache nw_connection_get_connected_socket_block_invoke [C1] Client called nw_connection_get_connected_socket on unconnected nw_connection TCP Conn 0x6000033050e0 Failed : error 0:50 [50] I0000 00:00:1724935720.853425 111359 subchannel.cc:806] subchannel 0x104919e10 {address=ipv6:%5B2404:6800:4006:814::200a%5D:443, args={grpc.client_channel_factory=0x600000049cc0, grpc.default_authority=firestore.googleapis.com, grpc.http2_scheme=https, grpc.internal.channel_credentials=0x60000260d020, grpc.internal.client_channel_call_destination=0x102cd4fb8, grpc.internal.event_engine=0x600000008ef0, grpc.internal.security_connector=0x600002c01400, grpc.internal.subchannel_pool=0x6000029442a0, grpc.keepalive_time_ms=30000, grpc.primary_user_agent=grpc-c++/1.65.1, grpc.resource_quota=0x600000cbfe40, grpc.server_uri=dns:///firestore.googleapis.com}}: connect failed (UNKNOWN:(domain:NSPOSIXErrorDomain, code:50, description:The operation couldn’t be completed. Network is down) {file:"/var/folders/hn/5bx1f4_d4ds5vhwhkxc7vdcr0000gn/T/ZipRelease/2024-07-25T04-01-28/project-ios/Pods/gRPC-Core/src/core/lib/transport/error_utils.cc", file_line:150, created_time:"2024-08-30T00:48:40.853037+12:00", grpc_status:2}), backing off for 955 ms

我无法定位错误原因,恳请帮助。以下是源代码:

源代码

import SwiftUI
import Firebase

@main
struct BizKoreaNZApp: App {
    init() {
        FirebaseApp.configure()
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

import SwiftUI
import FirebaseFirestore

struct ContentView: View {
    @State private var users = [User]()
    @State private var isLoading = false
    
    var body: some View {
        Text("Start")
        NavigationView {
            List(users) { user in
                Text(user.name)
            }
            .navigationTitle("Users")
            .onAppear {
                fetchUsers()
            }
            .overlay(isLoading ? ProgressView() : nil)
        }
    }
    func fetchUsers() {
        isLoading = true
        let db = Firestore.firestore()
        db.collection("users").getDocuments { snapshot, error in
            isLoading = false
            if let error = error {
                print("Error fetching users: \(error.localizedDescription)")
            } else if let snapshot = snapshot {
                self.users = snapshot.documents.map { document in
                    let data = document.data()
                    let name = data["name"] as? String ?? ""
                    return User(name: name)
                }
            }
        }
    }
}
struct User: Identifiable {
    let id = UUID()
    var name: String
}

问题分析与解决建议

  1. IPv6连接兼容性问题
    日志显示尝试连接IPv6地址失败,部分网络或模拟器环境可能存在IPv6支持缺陷。可以强制Firestore使用REST API替代gRPC,绕开IPv6问题:
    在FirebaseApp.configure()前添加配置:

    let settings = FirestoreSettings()
    settings.preferRestAPI = true
    Firestore.firestore().settings = settings
    FirebaseApp.configure()
    
  2. 模拟器网络状态重置

    • 打开模拟器,选择Hardware > Erase All Content and Settings清除所有数据,重启后重新测试。
    • 执行Command + Shift + K清除项目缓存,重启Xcode和模拟器。
  3. 屏蔽冗余底层日志
    这类日志多是Firebase依赖的gRPC库底层警告,不影响功能正常运行。可以降低Firebase日志级别来屏蔽:
    在FirebaseApp.configure()后添加:

    FirebaseConfiguration.shared.setLoggerLevel(.min)
    
  4. 检查网络环境与权限

    • 关闭电脑上的VPN、代理工具,避免网络连接被干扰。
    • 确认项目Info.plist中NSAppTransportSecurity配置允许HTTPS连接(默认已开启,若有自定义配置需验证)。

内容的提问来源于stack exchange,提问作者Daniel Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 21:35:07