プログラミング

Firebase Cloud Messaging(FCM)でAndroidプッシュ通知機能の実装をする

 

今回はFirebase Cloud Messagingを用いたAndroidアプリを作ります。

このCloud Massagingというサービスはその名の通り、Firebaseというクラウドを使ってAndroidやiOSなどのアプリケーションにメッセージを届ける、いわゆるプッシュ通知を可能にするサービスです。

Firebaseとは?

今回はFirebaseは当然ながらアプリ開発のバックエンドに使います。

Firebaseって何?という方のためにご説明すると、Firebaseはいわゆるクラウドのバックエンドシステムがパッケージ化されているサービスです。

活用法としては、アプリのアクセス解析やアプリのプッシュ通知機能の実装をとてつもなく早く可能にしてしまうことが出来るので、プロトタイピングや概念実証などのプロジェクト初期の活用はもちろん、そのままサービスをスケールさせてもある程度は耐えうるスケーラビリティあるバックエンドシステム設計が出来る点にあります。

Android Studioをインストールして新しいアプリ作成

Android Studioをまだインストールしてないという人はこちらからダウンロードして下さい。Android Studioを起動後、新しく作成するアプリは「EmptyActivity」を選択して下さい。

Firebaseに登録する新しいプロジェクトをつくる

Firebaseに登録すると以下のような画面が表示されます。

「プロジェクトを追加」をクリックし、プロジェクト名と国を設定します。
プロジェクト名はわかりやすいものであれば何でも構いません。

スクリーンショット 2018-08-07 16.06.34

作成したFirebaseプロジェクトに、先程Android Studioで作成したAndroidアプリを追加します。

keytoolが文字化けして読めないときの解決法

アプリをFirebaseに追加する際にデバッグ用の署名証明書が必要です。
証明書は「~/.android/debug.keystore」というファイルに入っているものになります。

このdebug.keystoreというファイル自体はAndroid StudioでBuildする際に自動的に作成されるファイルなのですが、証明書のSHA-1をどうやって入手するかご存知でしょうか。

アプリをFirebaseに追加する際にSHA-1を入力する画面は以下のとおりです。

スクリーンショット 2018-08-08 11.03.34

「デバッグ用の署名証明書SHA-1(省略可)」と記載のあるところに入力したいのですが、SHA-1がどこにあるのかわからなかったため、「?」マークをクリックし、リンク先を参照しました、以下のGoogleのサイトをチェックしました。

Authenticating Your Client
https://developers.google.com/android/guides/client-auth

しかし、ここにかいてあるコードをそのまま入力したところ文字化けが発生しました。
そこでKeytoolのエンコードを変えることで対処しました。

まずこのコマンドでvimをつかって「.bash_profile」を編集します。

vi ~/.bash_profile

ファイルが開けたら一番下に以下のコードを追加します。

export _JAVA_OPTIONS='-Dfile.encoding=UTF-8'

初心者向けですがターミナル上でvimを編集するのは少しばかりコツが要ります。
もし、上手くできない場合はこちらを参考にしてみて下さいね。

Vim/Viの終了のさせ方
https://qiita.com/kon_yu/items/b8864ff566b8b67a9810

編集が終わったら、一度ターミナルを閉じて再起動すればOKです。

「キーストアのパスワードを入力して下さい」の対処法

文字化け対策のためにすこしそれてしまいましたが、改めてFirebaseにアプリを追加する作業に戻ります。SHA-1を得るため、ターミナルから以下のコードを入力します。

keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore

すると以下の画面が表示されます。

スクリーンショット 2018-08-07 16.22.57

「キーストアのパスワードを入力して下さい」というメッセージが出ます。このときに思い当たるパスワードがある人はそちらを入力します。

私は手当たり次第に使いそうなパスワードを何度もトライしましたが、どれも違っていたので挫けそうになりました。しかし、私はこれまでAndroidアプリを作ったことがないことに気づき、初期設定でのパスワードを調べたところ「なし」ということがわかりました。

ですので、何も入力せずにReturnを押すと以下のようにSHA-1が表示されます。

*****************  警告 警告 警告  *****************
*  キーストアに保存された情報の完全性は検証されて  *
*  いません!  完全性を検証するには、キーストアの   *
*  パスワードを入力する必要があります。            *
*****************  警告 警告 警告  *****************

別名: androiddebugkey
作成日: 2018/08/07
エントリタイプ: PrivateKeyEntry
証明連鎖の長さ: 1
証明書:
所有者: C=US, O=Android, CN=Android Debug
発行者: C=US, O=Android, CN=Android Debug
シリアル番号: 1
有効期間の開始日: Tue Aug 07 16:01:53 GMT+09:00 2018 終了日: Thu Jul 30 16:01:53 GMT+09:00 2048
証明書のフィンガープリント:
	 MD5:  P2:XX:0A:1B:98:15:XX:C3:94:1E:F4:XX:87:21:8C:XX
	 SHA1: XX:VC:AA:CC:94:CC:XX:D3:7Y:B7:XX:01:XX:13:A0:XX:0B:4B:OO:XX
	 署名アルゴリズム名: SHA1withRSA
	 バージョン: 1

当然ながらMD5やSHA-1はそれぞれ異なりますので上をコピペしてはいけません。

google-services.json ファイルを Android アプリ モジュールの ルート ディレクトリに移動

次にSHA-1を無事Firebaseに入力した後、JSONファイルをAndroidのアプリモジュールのルートに追加しなくてはなりません。

スクリーンショット 2018-08-08 11.40.44

Android Studioの左上、Projectより作成したプロジェクト名のフォルダをクリックします。すると下の画像のように、「.gradle」や「.idea」、「app」といったフォルダが見えるかと思います。

スクリーンショット 2018-08-08 12.15.48

その中の「app」にダウンロードしたJSONファイルをドラッグ・アンド・ドロップして下さい。すると「Move」というウィンドウが出てきますので「OK」を押して下さい。これで完了です。

スクリーンショット 2018-08-08 12.15.35

参考にさせていただいたサイト

Macでkeytoolコマンドの文字化け対処法
http://kmiya.grgrjapan.com/archives/2327

keytool -list -keystore .android/debug.keystore のパスワードって??http://ria10.hatenablog.com/entry/20121101/1351787425

 

RELATED POST
翻訳 »