Firebase の HTTP 呼び出しと認証情報の更新で同じプロキシを使う必要があるときは、両方のトランスポート入力を設定します。また、HTTP プロキシ一覧から選んだ公開 HTTP エンドポイントにも、同じ 2 つの受け渡しが必要です。

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) の 2 つです。前者はアクセストークンを取得するための HTTP トランスポートを、後者は Firebase アプリの HTTP トランスポートを提供します。片方だけを設定すると、もう片方が既定の経路のまま残る可能性があります。

serviceAccountStream はアプリの信頼されたサービスアカウント認証情報ストリームです。アプリはそのワークロードのために保持し、通常の Firebase ライフサイクルで解放します。プロキシ設定は TLS 検証のために宛先ホスト名をそのまま残します。SDK クラスの置き換えも、すべてを信頼する SSL ファクトリも必要ありません。

ここでの範囲は、示した HTTP インターフェースです。Realtime Database の WebSocket や別のサービストランスポートを使うワークロードでは、そのトランスポートのルーティング対応を別途確認する必要があります。

関連記事