为 Firebase Admin Java 与令牌刷新使用同一个代理传输
把传输工厂传给 GoogleCredentials,把传输传给 FirebaseOptions,让两条 HTTP 路径都走代理。
当 Firebase 的 HTTP 调用与凭据刷新必须使用同一个代理时,要同时配置这两个传输入口。从HTTP 代理列表选出的公共 HTTP 端点同样需要这一对交接:
var proxy = new java.net.Proxy(
java.net.Proxy.Type.HTTP,
new java.net.InetSocketAddress("proxy.example.net", 8080));
var transport =
new com.google.api.client.http.javanet.NetHttpTransport.Builder()
.setProxy(proxy)
.build();
var credentials = com.google.auth.oauth2.GoogleCredentials.fromStream(
serviceAccountStream, () -> transport);
var options = com.google.firebase.FirebaseOptions.builder()
.setCredentials(credentials)
.setHttpTransport(transport)
.build();
var app = com.google.firebase.FirebaseApp.initializeApp(options);两个关键交接分别是fromStream(serviceAccountStream, () -> transport)与setHttpTransport(transport)。前者为获取访问令牌提供 HTTP 传输,后者提供 Firebase 应用的 HTTP 传输。只设置其中一个,另一个可能仍走默认路由。
serviceAccountStream是应用可信服务账号的凭据流。把它留给应用的工作负载,并按 Firebase 正常的生命周期释放。代理设置会保留目标主机名以完成 TLS 校验;既不需要替换 SDK 类,也不需要信任一切的 SSL 工厂。
这里的范围是文中展示的 HTTP 接口。使用 Realtime Database WebSocket 或其他服务传输的工作负载,需要单独核对该传输的路由支持。