firebase に Android アプリを登録したけど、firestore に書き込みができなくてハマった話

技術的な小ネタ

私は firestore および Android アプリ作成初心者です。

初心者でも firestore をバックエンドにした Android アプリを作るのはかなりハードルが低いということで、今ちょこっと取り組んでいるところです。

そこで、主題の件ですが、ハマったことを備忘録として残しておきます。

前提

開発環境

  • Windows10 上で、Android Studio を使用
    • 動作確認は仮想デバイスを使用
  • バックエンドには Firebase を使って、データベースに firestore を使用するつもり

困ったこと

ネット上に溢れている、なんてことない firestore への書き込み処理を実装して、仮想デバイスを使って動作確認をしてみました。

・・・書き込めませんでした。

そもそもなんか書き込みができているっぽい挙動をする(エラーを返さない?)けど、Firebase コンソールで firestore の中身を確認しても、何も書かれていませんでした。

原因と解決方法

仮想デバイスがインターネットにつながっていないことが原因でした。

以下、解決手段です。

1.前提

仮想デバイス関係ないですが、アプリケーションをインターネットに接続できるようにするためには、AndroidManifest.xml に以下を追記する必要があります。

<uses-permission android:name="android.permission.INTERNET" />

ちなみに今回はこれはちゃんとやっていました。

2.仮想デバイスの確認

ここが問題です。
よくよく仮想デバイスを見てみると、以下のようになっていました。

ビックリマーク「!」がついています。
ネットワークにつながっていないです・・・

ここにたどり着くまでに相当ハマりました。
まさか、ネットワークにつながってないとは・・・
というか、それなら実行時に例外とか投げて欲しいんですけど。java の言語仕様的にこういうもの?それとも Firebase のライブラリが不親切?
ツラかったです・・・

ということで、ネットワークへの接続方法ですが、これもネットに沢山溢れています。
ただし、仮想デバイス側のネットワーク設定とかは解決策の決定版的なものがないっぽく、解決する場合もあるし解決しない場合もあるし・・という感じでした。

てことで、てっとり早く解決する方法は、どうやら仮想デバイスのAPIレベルを25以上にする(もしかしたら26以上?)というのが間違いないようです。( https://code-examples.net/ja/q/782ece
APIレベルを25以上にすると、仮想デバイス内で自動的に wifi に接続してくれるらしいです。
(wifi 環境下でないとダメなのかもしれませんが・・・)

私は無駄に下位互換を意識してAPIレベル24で仮想デバイスを使っていたのですが、それがアダとなりました。

改めて、APIレベル26の仮想デバイスを用意して起動してみると、以下のように確かに wifi につながっていました。(なんならモバイルネットワークもつながっているっポイですが・・・謎です。)

この環境下で改めて firestore への書き込みを実行してみると、無事書き込みが成功しました。

コメント

タイトルとURLをコピーしました