Emergency Situation Sharing Tool, Send Message by Gmail, Cloud Functions, Firebase Cloud Messaging, Google Assistant API

Abstract#

I'm thinking what I wanted to do in ESST project can be implemented by using Firebase. I would like to study how Firebase can work by trying to develop ESST by using Firebase.

Topics#

  • AndroidクライアントからTwitterのタイムラインを取得できるか?
Firebaseのドキュメント[1]をベースに進めてみよう。
Twitter APIに登録して、API KeyとAPI Secretを取得して、FirebaseのAuthentificationのTwitterを有効にしてみた。
Default FirebaseApp is not initialized in this process  Make sure to call FirebaseApp.initializeApp(Context) first.
FirebaseAuth.getInstance();
これが出て先に進めない。
ここ[2]も重要だ。これをちゃんとやってみよう。
いつの間にか、上記エラーも出なくなるが、コンパイルエラーが。。。
Invoke-customs are only supported starting with Android O (--min-api 26)
Message{kind=ERROR, text=Invoke-customs are only supported starting with Android O (--min-api 26), sources=[Unknown source file], tool name=Optional.of(D8)}
うーん、以下をProjectのbuild.gradleに追加して解決[5]
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
TimeLineは取得できるようになりました。
  • quick start sample
行き詰ったので、まずは、Androidのクイックスタートをやってみる[3]。githubからプロジェクトフォルダダウンロードして、展開して、Android Studioでauthフォルダを開く。そうすると、必要なダウンロードが自動的に始まる。
エラーがいくつかでて終わる。必要な設定ファイルがないから当然。Tool->Firebaseでアシスト画面を開きAuthentification->connect Firebaseをやると、ネットワークの調子が良ければ、Firebaseサーバ側にプロジェクトが生成され、Androidアプリ側にもgoogle-services.jsonなど必要なファイルがダウンロードされて設定ができる。
TwitterのAPI KeyやAPI SecretをAPPSページ[4]から持ってきて、Firebase ConsoleのページとAndroidのリソースresにあるids.xmlに追加。
com.google.firebase.FirebaseException: An internal error has occurred. 
Identity Toolkit API has not been used in project 937695033468 before or it is disabled. 
Enable it by visiting 
https://console.developers.google.com/apis/api/identitytoolkit.googleapis.com/overview?project=937695033468 then retry. 
If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. 
Identity Toolkit APIを有効にしてみる。
com.google.firebase.auth.FirebaseAuthException: 
The given sign-in provider is disabled for this Firebase project. 
Enable it in the Firebase console, under the sign-in method tab of the Auth section.
注意点ですが、慣れていないと意外と引っかかるのが、Android StudioのConnect to Firebaseを使って設定すると、Firebase上にどんどんプロジェクトが自動作成されます。どのアプリがどのプロジェクトに接続するかを理解しながらAndroidアプリ側、Firebaseサーバ側、Twitterサーバ側を設定しないと当然エラーがおこります。当たり前なのですが。。
  • AndroidクライアントからGmailが送れるか?
まずは、OAuthでGoogleにログインしてみる。なお、[6]で最初に要求されるSHA Finger Printは、Firebase Assistantがすでに設定してくれてた.できたこと、できなかったことをSend Message by Gmailに記録。
  • Firebaseのサーバ側のDBにクライアントからメッセージを登録できるか。
Cloud Firestore がそれかもしれない。ちょっと試してみる。
アンドロイドだけじゃなく、ウェブもやってみる。
  • リアルタイムでプッシュできるか?
リアルタイムというのはCloud Functions
プッシュはサーバからクライアントにメッセージを送るもの。Firebase Cloud Messagingでサーバからクライアントはできる。クライアントからクライアントにおくるのは今回gmailでやるとして、Twitter からリアルタイムで情報を取得するのをできないものか。

Reference#

  1. [#1]Google, Android で Twitter を使用して認証する, https://firebase.google.com/docs/auth/android/twitter-login?hl=ja
  2. [#2]Google, Android プロジェクトに Firebase を追加する, https://firebase.google.com/docs/android/setup?hl=ja
  3. [#3]Google Inc, quickstart-android, https://github.com/firebase/quickstart-android
  4. [#4]Twitter, Inc., Twitter Apps, https://apps.twitter.com
  5. [#5]Invoke-customs are only supported starting with android 0 --min-api 26, https://stackoverflow.com/questions/49891730/invoke-customs-are-only-supported-starting-with-android-0-min-api-26
  6. [#6]Google Inc, Android で Google ログインを使用して認証する, https://firebase.google.com/docs/auth/android/google-signin?hl=ja