この記事は346 回閲覧されました。

現在、CordovaにてGoogle Apps Scriptと連携するAndroidアプリを作成中なのですが、その過程でGoogle Firebase Notification旧Google Cloud Messaging for Android)を利用したAndroidアプリへの通知処理を研究中です。Android端末へ通知メッセージを送る機能は、Google Apps Scriptとの連携では欠かせないもので、合わせてバッジの処理も重要な機能です。検討しているのは、自作のフォームから申請があった場合に通知し、現在未処理の申請がいくらあったら、通知と合わせてAndroidアプリに送り込み、バッジにも件数を表示させるというものです。

メッセージを送る為にはサーバーを用意するか?Firebaseのコンソールからメッセージを送る事になるのですが、今回はGASの中から使うので、そのための処理を用意しなければなりません。尚、Firebase Notificationの利用は無料です。

目次

使用するメソッドや機能

使用する為の準備

今回の肝はソースコード自体よりも、Cordovaアプリなどで利用する為のjsonファイルやサーバーキーをFirebaseで作成する事にあります。よくGoogle Apps Scriptで利用してるDeveloper Consoleのようなもので、ここで作成したプロジェクトからこの重要な2つを手に入れることが出来ます。以下の手順でプロジェクトを作成し、JSONファイルとサーバーキーを入手しましょう。

Firebaseコンソールでプロジェクトを作る

まずは、Firebase Consoleを開き、新規プロジェクトを作成ボタンを押します。押すとダイアログが出るので、プロジェクト名と国名を選択して、プロジェクト作成ボタンを押します。

図:まずは作成から始めましょう

どのアプリにFirebaseを追加するかを選択

次にどのアプリケーションにFirebaseを追加するかを選択し、ボタンを押します。今回はCordovaアプリで通知を利用するので、AndroidアプリをFirebaseを追加をクリックして次に進みます。

図:iOSやウェブアプリケーションなどもあります

アプリの詳細を入力する

Androidアプリの詳細情報を入力します。パッケージ名はCordovaアプリを作成した時に命名規則に則って付けたものと同じものを指定します。アプリのニックネームは適当に。今回はCalcmanとしました。SHA-1署名はここでは空のまま進みます。進むと設定が記載されたgoogle-services.jsonというファイルがダウンロードされます。これは、Cordovaアプリで利用しますので、大切に取っておいて下さい。続行ボタンを押します。

続行ボタンを押すとGradle用云々の説明が出ますが、スキップしますので、終了ボタンを押して下さい。

図:パッケージ名はCordovaのconfig.xmlにも記載されています

サーバーキーを取得する

左上の歯車ボタンをクリックして、プロジェクトの設定に入ります。入ったら、「クラウドメッセージング」の項目を開きます。ここにサーバーキーというものが表示されています。結構長い文字列です。コレをコピーします。このキーは今回のGoogle Apps Scriptで使用しますので、大切に取っておいて下さい。

図:サーバーキーを入手しましょう。

テスト送信をする

Cordovaアプリ側にgoogle-services.jsonを組み込み、Firebase Notificationに関するコードを記述して、Android端末に送った後の作業になります。Android端末で送り込まれたアプリを起動して、一旦バックグラウンドにします。その状態でFirebase Consoleにて左側のバーにある「Notification」を開き、新規メッセージボタンを押します。

出てきたフォームにメッセージ文、ターゲットはユーザセグメントとし、セグメントはパッケージ名がリストに出て来るので、それを選択。今直ぐ送信の状態でメッセージを送信ボタンを押し、無事に通知が来ればテスト送信成功です。この画面でのみユーザセグメント単位でメッセージを送れます。通常はトピック単位で送りますが、まだこの段階では送り先トピックリストが空なので送れません。

図:メッセージ送信画面です。

Firebase Analytics

今回は、Cordova AndroidアプリへのPush通知の為にコードをCordovaへ組み込んだわけですが、google-services.jsonを組み込みFirebaseへのアクセスを追加した事により、Firebase Analytics側でアプリの動向もチェックが可能になっています。Google AnalyticsのようにFirebase Analyticsのページにて、インストールされた端末の情報が収集されます。

Androidのバージョンや、国名、アクティブユーザと導入された端末数等。Firebase ConsoleのサイドバーにあるAnalytics画面から確認出来ます。Firebase自体は他にもデータベースやリアルタイム処理なども出来るようで、Cordovaからも使えそうです。

図:Firebase Analyticsの一例

Firebase Notificationの注意点

Firebase Notificationを利用した通知の送り付けですが、利用する上ではいくつかの注意点があります。自分も結構仕組みをなかなか理解できず、無駄に時間を消費してしまいました。主に嵌ったポイント等を中心に列挙してみます。

  1. Firebase Notificationのメッセージを送る時にユーザセグメント単位(Androidアプリのパッケージ名単位)で送る機能が、Firebaseのコンソールにはありますが、プログラムのコードからはこれは利用できません。
  2. 通知領域に表示される内容は、payloadのnotificationの内容の内、TitleとBodyおよびアイコンと背景色、着信音が反映しますが、これらの値をそのままでは、プログラム側でJSONとして取り出そうとしても取れません。dataの部分だけがとれますので、プログラムに値を渡す場合は注意。
  3. Androidアプリが閉じてる時には、通知はされません。また、Cordovaアプリはタスクから消すと終了してしまうので、常駐も出来ない。よって、アプリは閉じずにバックグラウンドにある状態でないと、通知は受け取れません。
  4. ユーザ単体でのメッセージ送信も可能ですが、その場合その機種で取得したAccess Tokenを送信者側が知らないといけません。
  5. PriorityをHighにしていますが、この場合即時に通知が飛びます。指定がない場合には、normalとなります。通常は指定なしでOK.
  6. 普通、ユーザ単体単位でメッセージは送らず、Topic単位で送ります。Topicは新規の場合、Firebaseコンソールでの選択画面には1日くらい経過しないと、選択肢に反映されないので、注意。
  7. iconは指定がない場合には、アプリのアイコンになりますが、指定した場合は、drawableフォルダに格納してる指定の名前のpng画像が表示されるようになります。
  8. soundは指定がない場合には、着信音がしません。指定した場合は、rawフォルダに格納してる指定の名前のサウンドファイルが再生されます。
  9. Authurizationで指定するのは、Firebase Consoleの設定 -> クラウドメッセージングに表示されてるサーバーキーです。ウェブAPIキーなどではありませんので注意。
  10. Firebase Consoleの設定 -> 全般に於いてダウンロード出来るgoogle-services.jsonファイルは、Cordovaの場合、プロジェクト配下にあるplatforms¥androidのフォルダの中に格納してパッケージ化しなければ、通知機能が働きません。

ソースコード

今回のコードは処理系ではなく、単体で利用する為の関数という形にしてあります。メインプログラムの途中で呼び出すなり、スクリプトトリガーに仕込むなりして利用する事を目的としています。送信先Topicはcalcmanというトピックにしました。

※testsend関数を実行時に、対象のCordovaアプリがバックグラウンド時に通知領域に表示されるようになります。

テスト送信結果

現在作成中のCordovaアプリにFirebase Notificationの受信のための仕組みを入れてテストをしてみました。スリープ復帰画面の通知は、コンテンツを非表示にしてるのでメッセージが出ていませんが、Android側の設定を変えればここで確認が可能。通知領域に来てるものは、タップすればアプリが起動する仕掛けになっています。ただ、不思議な事に、スリープ復帰画面はフルカラーのアイコンなのに、通知領域の方はシルエットみたいな表示になるのはなんでだろうか。

※Android5.0であるZenfone2で試したら、アイコンはシルエットではなくフルカラーでした。

図:スリープ復帰画面と通知領域に来た内容

ポイント

  • Google Formなどのデータ送信時にメールで通知ではなく、コレを使うと便利かも。
  • 各種申請などでスプレッドシートにデータが蓄積され、ステータスが未処理になってるものを1日1回、何件未処理だよと通知する時便利かも。
  • Cordovaアプリで送信時のレコード番号とその時の未処理件数を受け取って、ダイレクトに承認作業ウィンドウを出し、バッジの件数表示を更新するといった事に利用する予定です。
  • コードのポイントとして、Firebase Notificationに送りつける各種値はJSON形式で送りますので、JSON.stringifyで変換してあげないと、そのままじゃ送れません。
  • POST形式で送り付けるのでパラメータのmethodはPOSTでなければなりません。
  • UrlfetchAppで送信後に返ってくるサーバーからのメッセージもJSON形式でresponseに入っていますが、エラートラップ等で使うと良いでしょう。
  • 自動送信だけでなく手動でメッセージを遅れるようにスプレッドシートのサイドバーにGUIを作っておくのもいいかもしれない。
  • 送った時にスプレッドシートにログを記録するようにしておくと、尚吉。

関連リンク

Pocket
このエントリーをはてなブックマークに追加
Bookmark this on Yahoo Bookmark
Pocket