Firebase Functions の HTTP トリガーをアプリから呼ぶ

Firebase Cloud Functions には、HTTP リクエストでトリガーできる関数があります。

基本的にはこのような形をしています。

この関数をアプリから呼び出したい場合に、簡単にできる仕組みが SDK に用意されています。

公式のドキュメントはこちらです。


まず、Function ですが、onRequest ではなく onCall というトリガーを使います。

例えば、以下のようになります。

これを、Firebase のサーバにデプロイします。

すると Firebase コンソールの Functions の画面に、デプロイした関数が表示されます。

この関数はアプリから呼び出すためのものですので、ブラウザで URL を開くと、エラーが表示されます。


これを Android アプリから呼び出すには、まず、アプリレベルの build.gradle に以下の依存関係を追加します。

implementation 'com.google.firebase:firebase-functions:19.0.2'


そして、以下のように実装します。

ローカルエミュレータで動作している Functions を呼び出すこともできます。

ローカルエミュレータは、以下のコマンドで起動します。

$ firebase emulators:start --only functions


先ほどのアプリのコードの先頭付近を以下のように変更します。

ただし、このアプリを実行した場合、関数を呼び出した所で、下記のエラーが出ます。

java.net.UnknownServiceException: CLEARTEXT communication to 10.0.2.2 not permitted by network security policy

Android 9 以降では、HTTP 通信が無効になっているために発生するエラーです。

これの修正方法は、ネットに沢山情報がありますので、検索してみて下さい。


解説は以上ですが、useFunctionsEmulator("http://10.0.2.2:5001") のところを、useFunctionsEmulator("localhost:5001") にした場合の、エラーについて書いておきます。

その場合、以下のようなエラーが出ます。

java.net.ConnectException: failed to connect to localhost/127.0.0.1 (port 5001) from /127.0.0.1 (port ) after 10000ms: isConnected failed: ECONNREFUSED (Connection refused)

どうも localhost を指定することは出来ないようです。

その代わり、特別に用意された 10.0.2.2 というアドレスを使う必要があるようです。

※掲載内容は、記事公開時点のものです。紹介されているサービス内容は変更される場合がありますので、ご利用の際は事前にサービス提供元等をご確認ください。

shiba

スマホアプリエンジニアです。
Firebaseについて勉強した事を書いていこうと思います。

銀座ITラボ | FirebaseやAWSに関する技術情報を配信中

銀座ITラボは、iOS/Androidアプリなどのスマホアプリ、Firebase、AWSなどのクラウドサービス、Webシステム等の技術情報に関する記事を紹介するシンプルメーカーのオウンドメディアです。

0コメント

  • 1000 / 1000