概要
Firebase Admin SDK (Java) を使って FCM Push を Proxy サーバ越えで送信するときにドハマリしたので、注意点を記載します。
なお、Proxy 設定を行う手順は Firebase Admin SDK ドキュメントには一切記載がありません
(そのくらい書いといてよね >Google)
FCM Push の送信手順(Proxyなし)
Proxyなしの場合の送信手順は 送信リクエストを許可する に記載されています。
このうち重要なのは初期化部分で、以下のようなコードになります。
// GoogleCredentials を生成
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"))
.build();
// FirebaseOptions を生成
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.build();
// FirebaseApp を初期化
FirebaseApp.initializeApp(options);
Proxy 越えが必要な場合
Proxy 越えが必要な場合は HttpTransport
を Proxy 設定付きで作成する必要があります。
これを GoogleCredentials と FirebaseOptions の2箇所に設定する必要があります。
// Proxy 設定付きの HttpTransport を生成
Proxy proxy = new Proxy(Proxy.Type.HTTP,
new InetSocketAddress("proxy.example.com", "8080"));
HttpTransport httpTransport = new NetHttpTransport.Builder()
.setProxy(proxy)
.build();
// GoogleCredentials を生成
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"),
() -> httpTransport) // #1
.build();
// FirebaseOptions を生成
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setHttpTransport(httpTransport) // #2
.build();
// FirebaseApp を初期化
FirebaseApp.initializeApp(options);
- GoogleCredentials
- fromStream() の第2引数に
HttpTransport
の factory を設定する必要があります
- fromStream() の第2引数に
- FirebaseOptions
- setHttpTransport() で
HttpTransport
を指定する必要があります
- setHttpTransport() で
これで Proxy 越えで FCM Push 送信ができるはずです。