はじめに
FCMを使用したPUSH通知を行うアプリケーションを開発する際に、プロキシを使用してFCMからアクセストークンを取得するようにしたい場合に起こる影響についてまとめました。
何が問題だったのか
私の開発していたアプリケーションは様々な種類の機能を集めたもので、nodeのexpressを使用しています。FCMにアクセスしてアクセストークンを取得する処理はそのアプリケーションの中の一機能に過ぎす、通信を行っている機能は他にも複数ありました。それらの機能は、別スレッドでアクセストークン取得処理と同タイミングで実行される可能性があります。その際、それらの通信がプロキシを使いたくない通信であった場合でも、googleapisのREADMEに載っている方法でプロキシを設定していると、その設定がアクセストークン取得処理以外の通信にも影響が出てしまうといったものです。
問題のプロキシ設定方法
googleapisのREADMEでは、HTTP_PROXY
という環境変数に使用するプロキシのurlを設定するといった方法が紹介されていました。しかし、HTTP_PROXY
とは一般的に様々なシステムから参照されている環境変数です。環境変数に設定されている時間が、例え一瞬であったとしても大量にリクエストの来るアプリケーションが同じマシン上に存在すれば、その通信に影響が出るでしょう。
アクセストークンの取得のみに絞ってプロキシを設定できないのか
結論から言うとできませんでした。FCMのアクセストークン取得では、FCM公式リファレンスにある通りにコーディングすると、googleapisのjwtClient.authorize
というメソッドを使用し、FCMと通信します。このメソッドにプロキシを設定する引数などは無いので、結局googleapisのREADMEに載っている方法でしかプロキシは設定できないと思われます。(私は考えつきませんでしたが、ご存知の方がいれば教えてください)
最後に
この記事を見ていただいた方は、私と同じようにFCMのアクセストークン取得にプロキシを使用したいと考えてらっしゃる方がほとんどだと思いますが、その際はプロキシ設定の影響がでないようにサーバ内の通信する処理をアクセストークン取得のみにしたり、そもそもプロキシを使用しない運用に変えるなど、気をつけていただければと思います。