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

如何让Android应用的所有Firebase请求通过代理转发?

解决Firebase请求通过自定义代理转发的问题

直接修改google-services.json里的firebase_url和storage_bucket无法实现所有Firebase服务的代理转发,原因在于:

  • 多数Firebase服务(如Firestore、Auth)的API端点是通过project_id动态生成的,仅Realtime Database会读取firebase_url,其他服务不会生效
  • storage_bucket字段要求填写存储桶名称(格式如myproject-asdfa.appspot.com),而非URL,你填写的https://localhost:9000不符合规范,因此不生效

通用解决方案:自定义OkHttpClient拦截所有请求

通过替换Firebase SDK的默认HttpClient,让所有请求走指定代理,适用于所有Firebase服务:

  1. 创建带代理配置的OkHttpClient
// 配置代理地址和端口
val proxy = Proxy(Proxy.Type.HTTP, InetSocketAddress("localhost", 8000))
val okHttpClient = OkHttpClient.Builder()
    .proxy(proxy)
    // 若代理需要认证,取消注释以下代码并填入账号密码
    // .proxyAuthenticator { _, response ->
    //     val credential = Credentials.basic("代理用户名", "代理密码")
    //     response.request.newBuilder()
    //         .header("Proxy-Authorization", credential)
    //         .build()
    // }
    .build()
  1. 全局配置Firebase使用自定义HttpClient
    在初始化FirebaseApp时传入自定义配置,所有Firebase服务都会复用这个HttpClient:
val firebaseOptions = FirebaseOptions.Builder()
    .setProjectId("myproject-asdfa")
    .setApplicationId("你的应用ID(从google-services.json中获取)")
    .setApiKey("你的API Key(从google-services.json中获取)")
    .setHttpClient(okHttpClient)
    .setStorageBucket("myproject-asdfa.appspot.com") // 填写正确的存储桶名称
    .build()

// 初始化FirebaseApp
if (FirebaseApp.getApps(this).isEmpty()) {
    FirebaseApp.initializeApp(this, firebaseOptions)
}
  1. 针对单个服务单独配置(可选)
    如果不需要全局配置,也可以为单个Firebase服务单独设置HttpClient:
  • Firestore
val firestore = FirebaseFirestore.getInstance()
val settings = firestore.settings.toBuilder()
    .setHttpClient(okHttpClient)
    .build()
firestore.settings = settings
  • Cloud Storage
val storage = FirebaseStorage.getInstance()
val storageSettings = FirebaseStorageSettings.Builder()
    .setHttpClient(okHttpClient)
    .build()
storage.storageSettings = storageSettings

注意事项

  • 确保代理服务器能正确转发HTTPS请求,若使用本地代理,需在设备上信任代理的SSL证书,否则会出现SSL握手失败
  • Realtime Database可单独通过firebaseOptions.setDatabaseUrl("https://localhost:8000")配置,但代理需正确转发该地址到实际的Firebase RTDB端点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:21:18