🐥

Androidエミュレータから開発PCのLocalhostに接続できない??

2021/10/09に公開

前書き

ReactNativeでAndroidアプリの開発をしていたときのお話。
バックエンドはFirebaseのサービス類で構築しており、Androidエミュレータを起動して、いざ通信......という時に、事件が発生しました。

事件の詳細

アカウント登録の実装をしており、以下のように記述。

auth().useEmulator("http://localhost:9099");
await auth().createUserWithEmailAndPassword(emailAddress, password);

AndroidエミュレータからFirebase Authentication(エミュレータ)に接続しようしました。

すると、以下のようなエラーが返されてしまいました。

Error: [auth/unknown] An internal error has occurred. [ Failed to connect to /localhost:9099 ]

AndroidとFirebaseのエミュレータは起動しているし、ドキュメント通りに、Firebaseプロジェクトにアプリ登録もした。なのになぜ??
私は、文字通り頭を抱えた後、一旦トイレに行きました。
......
......

「あなたは、わたしのことを誤解している」

神の啓示のように、どこからか届いたその言葉。

「そうか......!」
水を流すのと同時に、私は急いでPCの前に戻りました。(手は洗った)

私は、とてつもない使命感を胸に、以下のサイトに辿り着きました。
https://developer.android.com/studio/run/emulator-networking

Androidエミュレータの各インスタンスは、仮想ルータ上で動いており、仮想ルータは、「10.0.2/24」ネットワークアドレス空間を管理していました。
そして、エミュレータでいうLocalhostは、エミュレートしているデバイス自身を指しており、開発PCを指しているわけではありませんでした。

開発PCを指すには、「10.0.2.2」と指定する必要がありました。

auth().useEmulator("http://10.0.2.2:9099");
await auth().createUserWithEmailAndPassword(emailAddress, password);

エミュレータを立ち上げ、再度アカウント登録を試してみると、無事に成功しました。

その日の帰り道の足取りは軽かったです。

Discussion