無料で使えて送り放題！Google I/Oで発表されたFirebase Notificationを使ってみた

先日開催された[Google I/O](https://events.google.com/io2016/)
そこで無制限で使い放題だって発表されたFirebase Notification
今回はプッシュ通知を送る必要があったのでさっそく導入してみました！
正直導入が簡単すぎて……さすがGoogle、恐ろしい子……
#Firebaseを使う準備
まずはFirebaseにアプリを登録するところから始めます。
このステップさえやってしまえばこれ以降いとも簡単にFirebaseの機能が使えるようになります。

まず、[Firebaseのページ](https://www.firebase.com/)を開きます。

<img width="960" alt="fire.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/05d20957-2b57-06f7-ff39-37807ec26be0.png">
See our new website → GET STARTED FOR FREEと進んでいきます。

<img width="959" alt="start.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/7108ef46-36a8-7745-5a85-89ebdcbb86a3.png">

<img width="960" alt="new.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/3eb99902-7270-714d-71d6-ff32e6b7ae3b.png">
新規プロジェクトを作成！

<img width="365" alt="regist.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/89b5f435-68ef-f48d-0a59-e11819a0b80e.png">
わかりやすい名前を付けてプロジェクトを作成します。

<img width="960" alt="a.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/d4318201-2076-9ee0-5e36-51a99eb1ba64.png">
ここから自分のアプリの登録になります。今回はAndroidアプリに導入してみます。

<img width="533" alt="gh.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/9563f124-302b-4781-7a5d-c3d1d5d313f1.png">
自分のアプリのパッケージ名を入力します。
証明書は入力してもしなくてもどっちでもいいです(Notificationには使わないので)

<img width="533" alt="ggggg.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/378cd926-52ba-b64a-e002-10d3bcc62d81.png">
<img width="169" alt="jjj.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/e329a0bf-7f4e-965a-5283-0c7d164136ea.png">
アプリを追加ボタンを押すとjsonファイルが勝手に生成されて勝手にダウンロードが始まります。
なのでDLしたjsonファイルを図の説明通り自分のアプリのプロジェクトに追加していきます。

```gradle:build.gradle（project/build.gradle）
buildscript {
  dependencies {
    // Add this line
    classpath 'com.google.gms:google-services:3.0.0'
  }
}
```

```gradle:build.gradle（project/app-module/build.gradle）
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
```
次にbuld.gradleに上記2行を追加するだけでFirebaseの準備が終わります。
これでFirebaseのいろいろな機能が使えるようになりました！
やったぜ！
#一番簡単なNotification導入
```gradle:build.gradle（project/app-module/build.gradle）
compile 'com.google.firebase:firebase-messaging:9.0.0'
```
この1行を追加します。おわり。
これだけでコンソールから送ったメッセージをNotificationに表示することが出来ます。
簡単！
ただこのままではアプリがバックグラウンドにいる時しかメッセージを受け取れません。
これ気づかなくてかなり悩んだｗ
よく見ると[ドキュメント](https://firebase.google.com/docs/notifications/android/console-audience#send_a_message_from_the_notifications_console)に目立つように書いてあるんだからちゃんと読めよってお話。
<img width="553" alt="note.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/6447ac8c-3dc8-1436-a4fb-efc53909647d.png">

フォアグラウンドでの処理は後述するとしてとりあえずメッセージを送ってみましょう！
#Notificationを送信してみる
<img width="251" alt="hh.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/2f020d97-041c-20ed-9f47-589ad3e632a1.png">
このアイコン(もしくは左のメニュー)からNotificationのページに遷移します。

<img width="763" alt="nn.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/b27ed95d-72bd-115f-bd89-883956093496.png">
最初のメッセージを送信してみましょう。

<img width="752" alt="y.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/976bd776-17e2-bbd3-ea5e-423086717b53.png">
送りたいメッセージ文とターゲットだけ指定すればすぐメッセージを送ることが出来ます。

<img width="528" alt="aaaa.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/82960/28139a21-fcac-898c-c6c0-600b5683e4b2.png">
タイトルを指定したり、カスタムデータを入れることもできます。これによって通知を開いたときの挙動などをonLaunch()で制御することが出来ます。
設定が終わったら送信ボタン！

![Screenshot_20160522-220029.png](https://qiita-image-store.s3.amazonaws.com/0/82960/72161edf-3c00-f2ea-ba10-c96bfc9854be.png)
2秒くらいできます。すごい！
これで誰でも簡単にプッシュ通知が可能になります。やったね！
#フォアグラウンドにいる時もメッセージを受け取る
フォアグラウンドにいる時にも処理を行いたい場合はFirebaseMessagingServiceを継承したクラスを作り、そこで処理を行う必要があります。

```java:MessageService.java
public class MessageService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        Log.d("NANAMIN", remoteMessage.getNotification().getBody());

        // プッシュ通知来た時にやりたいことをここら辺に書く
    }
}
```

また、マニフェストに以下を追加します。

```xml:AndroidManifest.xml
<service
    android:name=".service.MessageService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>
```
これでアプリがフォアグラウンドにいる時も処理ができるようになりました。:tada: :tada: :tada: 

今までお金かかりそうだしなんか大変そうだし敬遠しがちだったプッシュ通知、ここまで簡単に実装できるとなるとアプリ作る時にかなり幅が広がる感じがしますね。