🐥
Androidエミュレータから開発PCのLocalhostに接続できない??
前書き
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の前に戻りました。(手は洗った)
私は、とてつもない使命感を胸に、以下のサイトに辿り着きました。
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