「マッチングが成立しました！」通知を見てニタニタしたい。（FirebaseでAndroidアプリに通知を送るまで）

# 概要・作るもの

「マッチングが成立しました！」という通知が届くと、一瞬で幸福感に浸れますよね？
とはいえ、なかなか通知が来ないので、Androidアプリを作り、自分で自分に通知を送っちゃいましょう。

**※2019年12月追記※**
兄弟記事、[SORACOM LTE-M Button を使って、「モテモテスイッチ」を開発する。](https://qiita.com/hayate_h/items/4b755e15ec9cd5a55e31)を書きました。
SORACOM の IoTボタンを押すと、いつでもどこでも**モテる**という画期的なシステムです。こちらもあわせてご笑納ください。
![screen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/cb952933-7dbe-6847-877d-5572e0164cfc.png)


###【使用する技術】
- Firebase Cloud Messaging （FCM）
- Android Studio（Java : Androidアプリ開発）
- Postman, cURLコマンド, Node.js 

躓いた箇所の自分用メモとして、また、他の方の参考にもなれば幸いです。





# 1. Androidアプリの作成（前半）

Androidアプリを作成していきましょう。

## 1-1. Android Studio のダウンロード・インストール
事前に、Android Studio をダウンロード・インストールしておきましょう。
　　https://developer.android.com/studio?hl=ja


## 1-2. 新しいプロジェクトの作成
Android Studio を開き、新しいプロジェクトを作っていきましょう。

**画面上部[File] → [New] → [New Project...]を選択**
![screenshot_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/eb3fc1ec-b2b0-1cf7-34a6-e79866639021.png)

**Choose your project 画面**
Empty Activity を選択し、画面下「Next」を選択します。
![screenshot_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/a894bc1a-b067-6d89-aca5-65bc73fb67ac.png)



**Configure your project 画面**
![screenshot_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/ee6670d1-1904-e926-e491-f04e087d3f93.png)

- 「Name」には、任意のアプリの名前を記載しましょう。
     - ※これが画面に表示されるアプリ名とはならないため、名前を気にしすぎなくて構いません。
- 「Package name」は、アプリの識別子となります。後ほど必要となるため、保存をしておきましょう。
- 「Language」 は、今回はJavaを選びましょう。
- 「Minimum API level」 は"API 21: Android 5.0 (Lolipop)"などを選択しましょう。
    - Android 4.1以前の古いものを選択すると、Firebaseからの通知に対応できません。
    - 詳細については、https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja を参考
- 最後に「Finish」を押します


**初回のBuildが始まり、終わるとMainActivity.java の編集画面が開きます。**





# 2.Firebase の設定
同時並行で、Firebaseの設定も進めていきましょう。

## 2-1. Firebaseへのログイン

**Firebase の画面に進み、右上の「コンソールへ移動」をクリックし、Googleアカウントでログインします**
![screenshot_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/c32a6253-6be7-3f40-976f-d5e61bc4875e.png)



## 2-2. Firebaseプロジェクトの作成と、Androidアプリへの追加

**「プロジェクトを追加」を選択**
![screenshot_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/d792ec2a-2206-63a0-603d-32180bfdb40e.png)



**プロジェクトの作成（手順 1/3）画面**

任意の「プロジェクト名」をつけ「続行」を押します。
![screenshot_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/e558452b-bf64-4e7f-9897-682845d3fa18.png)



**プロジェクトの作成（手順 2/3）**

Googleアナリティクスの設定は、「今は設定しない」を選びます。




**プロジェクトの作成後**
「続行」を押します。「Project Overview」の画面に遷移します


![screenshot_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/1ebbde87-ed0b-9232-0644-be0af647408d.png)

## 2-3. AndroidアプリへのFirebaseプロジェクトの追加
**「Project Overview」の画面**
画面中央の「ドロイド君」のアイコンを選択します。
![screenshot_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/e37a1332-a3fa-3562-9ce1-990c7db634df.png)




**「AndroidアプリへのFirebaseの追加」画面**
![screenshot_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/38296614-37b8-d001-eb76-b40ad37b5650.png)

- 「Androidパッケージ名」には、**1-2.新しいプロジェクトの作成**で設定したアプリ名を入力します。
- 「アプリのニックネーム（省略可）」には、このアプリのわかりやすい名前をつけます。
- 「デバッグ用の証明書 SHA-1（省略可）」は、今回は空欄のままで構いません。

最後に、「アプリを登録」ボタンを押します。



**「②設定ファイルのダウンロード」画面**
1. 画面中央の「google-services.jsonをダウンロード」を選択し、「google-services.json」 ファイルをダウンロードします。![screenshot_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/df9ce3c6-5e9e-ce7e-2d4f-4cc7eb837231.png)
2. Android Studio を開き、画面左上「Android」を選択し、「Project」ビューに変更します。![screenshot_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/7e46c9da-7b07-5ff9-89f3-5540fad63e6e.png)
3. プロジェクトのフォルダを展開後、「app」フォルダを展開します。![screenshot_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/7dd6e488-fdc1-1c12-bbdb-0d124328754c.png)
4. ダウンロードした`google-services.json` ファイルを、 Android アプリ モジュールの ルート ディレクトリに移動します。
     （ダウンロードフォルダから、Android Studioの「app」へ、ドラッグ・アンド・ドロップすることでできます。）![screenshot_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/f63728c9-4d34-ecac-307c-b974483ae8b5.png)
5. Moveのポップアップ画面が表示されるので、「OK」を選択します。![screenshot_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/4028827c-f058-3852-6397-a28e37990a1d.png)
6. 「app」配下に'google-services.json'が追加されます。![screenshot_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/169d678c-aff7-efaf-891a-519545e4c0dc.png)
7. Firebaseの画面に戻り、「次へ」を選択します。![screenshot_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/8fd3e70f-c993-5d22-531f-09e5020641eb.png)




**「③Firebase SDKの追加」の項目になります。**
1. まず、「プロジェクトレベルのbuild.gradle」に表示された項目を、
Android Studioにて、プロジェクトレベルのbuild.gradleに記載します。
![screenshot_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/10ee9563-9fd2-9542-a211-d15aad4082e6.png)

2. プロジェクトレベルのbuild.gradle は、`<プロジェクト名>/build.gradle`なので、ダブルクリックして開きましょう
![screenshot_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/14600b35-0dc0-ebf6-a424-495e4044ca0a.png)

3. コンソール画面の表示の通りに、項目を追記してください。（最初から記載されているものもあります。）
![screenshot_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/33e6e8cc-73cb-b47f-2150-e9a4c7466acf.png)

4. なお、Android Studio は初期設定で自動保存がONなので、[Ctrl] + s などは不要です。
5. 次に、「アプリレベルの build.gradle」に表示された項目を、
Android Studioにて、アプリレベルの build.gradleに記載します。
![screenshot_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/da29836a-9b7d-4bb4-1f1d-9566c75341a7.png)
6. アプリレベルの build.gradle は、`<プロジェクト名>/app/build.gradle`なので、ダブルクリックして開きましょう
![screenshot_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/fc2580e3-523f-0ad5-cf88-eba4ae384fe1.png)
7. コンソール画面の表示の通りに、項目を追記してください。（最初から記載されているものもあります。）
![screenshot_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/62dc464b-aeb5-aec8-58cd-bc0f87c57882.png)
8. 追加で、Firebase Cloud Messaging クライアント アプリを設定しましょう
参考：https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja

```gradle:＜プロジェクト名＞/app/build.gradle
dependencies {
    // 以下の行を追記します
    implementation 'com.google.firebase:firebase-messaging:19.0.1'
    }
```
9. 最終的に、3箇所記載されることとなります。（2019年9月現在）
![screenshot_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/dea84ec0-8093-f203-b9ca-aca4534fe84c.png)

10. 最後に、IDE上部 に表示されるバーの [Sync now] をクリックします。
![screenshot_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/461ea496-e568-d06c-d0cd-4cbaaf7799b5.png)

11. そして、Firebaseの画面に戻り、ブラウザ下部の「次へ」を選択します。
![screenshot_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/10a3a053-201e-f9f0-d25e-14cbb3c6afb4.png)



**「④Android 向けスタートガイドを読む」の画面**

「コンソールに進む」を選択してください。
![screenshot_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/cd16cf69-f0b2-19f2-3d1e-58dcefc03f69.png)


# 3. Androidアプリの作成（後半）


Android Studioに戻り、アプリを作成します。

##### 画面左上「Project」を「Android」ビューに変更
![screenshot_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/5a768442-23ee-7338-5130-5769edb740fc.png)


## 3-1. アプリの表示名設定

**Android画面上での、アプリの表示名を設定**
res/values/strings.xml を開いて、Android画面上での、アプリの名前を設定します。
![screenshot_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/508c76d5-7624-2515-e199-3eaa37f58879.png)

通知が来た時に嬉しいように、マッチングアプリ風の名前にしておきましょう笑

```xml:strings.xml 
<string name="app_name">Match!</string>
```


## 3-2. MainActivity の設定

メイン画面となる、**MainActivity.java** に、通知のために必要となるトークンを発行する機能を実装します。

参考ドキュメント：https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja#%E7%8F%BE%E5%9C%A8%E3%81%AE%E7%99%BB%E9%8C%B2%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97


**app / java / com.example.<プロジェクト名> / MainActivity を開く**
![screenshot_69.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/bf0d1f0f-8a58-70d4-08a6-d0029677a842.png)

**以下のコードを記載します**

```java:MainActivity.java
package com.example.motemoteapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
                        if (!task.isSuccessful()) {
                            Log.w("FIREBASE", "getInstanceId failed.", task.getException());
                            return;
                        }

                        // Get new Instance ID token
                        String token = task.getResult().getToken();

                        // Log and toast
                        Log.d("FIREBASE", " TOEKN = " + token);
                        Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
                    }
                });
    }
}
```
最初の起動時に発生するイベントである、onCreateメソッドの定義に、
トークンを取得してログに出力する処理が記載されています。


## 3-3. 補足情報
FCMを使う際、[FirebaseMessagingService](https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService)を継承したサービスを作成する必要があります。
このサービスを実装することで、フォアグラウンド（アプリが起動している状態）での通知の表示など、高度な通知の設定ができるようになります。
しかし、今回はこのサービスを用意しなくても、通知の受信ができるため、割愛します。

- ドキュメント：https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja
- 参考記事１：https://qiita.com/outerlet/items/49a5346ba206eaf877d5
- 参考記事２：https://qiita.com/flatfisher/items/bdec83caf3c7f9c8917c

なお、「参考記事２」は、とても親切な記述で一読をおすすめしますが、
記事にて取り上げられている、FirebaseInstanceIdService の実装は、2019年9月現在、推奨されなくなっているため、
トークンの取得周りの処理については注意が必要です。
- 参考記事３：[FirebaseInstanceIdServiceがDeprecatedになった件](https://qiita.com/keijumt/items/d45ea0da3dfa6284ad90)
- 参考記事４：[Android で Firebase Cloud Messaging クライアント アプリを設定する - 現在の登録トークンの取得](https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja#%E7%8F%BE%E5%9C%A8%E3%81%AE%E7%99%BB%E9%8C%B2%E3%83%88%E3%83%BC%E3%82%AF%E3%83%B3%E3%81%AE%E5%8F%96%E5%BE%97)



## 3-4. アプリの実行
PCとAndroid端末をつなげ、アプリを実行します。

**Android端末の「USBデバッグモード」をONにした上で、USBケーブルでPCと接続**
参考URL：https://techacademy.jp/magazine/2433

**画面右上で、該当端末を選択**
![screenshot_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/0bb37c3d-07ad-2abd-a2de-03b14506117d.png)

**画面横の右向き三角ボタンを押して、実行**
![screenshot_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/b691d8d3-b8b2-a517-d42d-03f95616d739.png)


**問題がなければ、ビルドが成功し、Android端末でアプリが起動します**
ビルドが終わってから、少し時間がかかります。焦らずに待ちましょう

**Androidアプリ上で、トークンがトースト表示される**
![Screenshot_20190916-191641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/8ef5bbb2-71ed-5486-9dc2-da66ccb0d821.png)



**Android Studio上の「6:Logcat」に、トークンが表示される**
このトークンは後ほど必要になるので、コピーしておきましょう。
![screenshot_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/6b15f36c-5c78-a48e-a2ef-fd90e6a8f3a1.png)




# 4. 通知のテストを行う
Firebaseのコンソール画面から、通知のテストが行えます。

**FirebaseのCloud Messaging画面**
画面左「Cloud Messaging」→「Send your first message」を選択します。
![screenshot_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/774c820b-6424-1bd0-ce26-610150890682.png)


**「通知の作成」画面**
「通知のタイトル」と「通知テキスト」に任意の名前をつけて、
画面右の「テスト メッセージを送信」を選択します。
![screenshot_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/50d0e961-e66c-cf6c-72d5-e1d739f93da0.png)



**「デバイスでのテスト」ポップ画面**
「FCM登録トークンを追加」のところに、先程Android Studio の、Logcatから取得したトークンをペーストし、右隣の「＋」ボタンを押します。
![screenshot_45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/3e55142a-1ce3-6555-d8f1-9f9c5fa7f5ed.png)


**テストの実行**
**Android端末 がロック画面になっていることを確認したうえで、**
画面右下の「テスト」を選択します。
![screenshot_46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/52314130-1906-9407-0da0-d5e9dfedd8c4.png)

Androidに通知が飛んできます。
![Screenshot_20190916-131243.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/0f53cf0d-af31-e78b-9fe7-d17ffc6d6344.png)


やったね！！



**※**今回は、[FirebaseMessagingService](https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService)を継承したサービスを作成していないため、
アプリがフォアグラウンドの時は通知が表示されない。そのため通知を受け取るためには、ロック画面にしておく必要がある。





# 5. APIを使って通知を送る

## 5-1.必要な情報の用意

APIを使って通知を送るにあたって、以下の２つの情報が必要になります。

- トークン
- APIキー

####トークン
トークンは、**3-4. アプリの実行** にて、Android Studio のLogcatからコピーしたトークンです。

####APIキー
APIキーは、Firebaseのコンソール画面から取得します。

**FIrebaseの画面から、作成したアンドロイドアプリの設定画面に進む**
![screenshot_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/fa51f139-051a-6639-dbdd-e2bfd9c9dda5.png)

**「Settings」の画面が開いたら、「Cloud Messaging」のタブを選択**
![screenshot_59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/8a1043d9-41a6-a4ca-a6c6-b386d39d827d.png)


**「プロジェクト認証情報」の「サーバーキー」をコピー**
![screenshot_60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/f620c0ad-973c-7158-f234-d0f603806485.png)





## 5-2. Postmanを使う方法

リクエストが簡単に送信できる、Postmanを使いましょう。

**Postmanをダウンロード・インストール・そして初回のユーザー登録を行なう**
　　https://www.getpostman.com/

**Postmanが開いたら、画面上部の「+」ボタンを押す**
![screenshot_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/4faab781-d3a4-8f56-bcaf-2072aed96777.png)


**新しいリクエストの作成画面**

以下のように、入力してください。



- 「リクエストの方法」 は  `POST`
- 「URL」は `https://fcm.googleapis.com/fcm/send`
![screenshot_61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/30e13624-402b-7381-6da9-590aaffe77ca.png)


- 「Headers」は以下２つを記載



| KEY           | VALUE            | 補足            |
| ------------- | ---------------- | ---------------- |
| Authorization | key=＜APIキー＞  | ＜APIキー＞は**5-1.必要な情報の用意**で確認をしたAPIキーとなります。  |
| Content-Type  | application/json | -- |




- 「Body」は、`raw`を選択して、以下のjsonを貼り付けます。
![screenshot_62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/0f0e37fc-53e9-3bda-10c6-24d2e83b4124.png)

```json:raw
{
	"notification" : { 
		"title": "マッチングが成立しました",
		"body": "メッセージを送りましょう！",
		"sound":"default",
		"icon":"@android:drawable/sym_action_chat",
		"color":"#FF8000"
	} , 
	"to" : "＜トークン＞", //＜トークン＞は、'5-1.必要な情報の用意' で確認をしたトークンとなります。
	"priority":"high"
} 
```

最後に、「Send」ボタンを押すことで、
画面下部のレスポンスが「"success":"1"」 になり、Androidに通知が来ます！
![screenshot_63.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/81fae102-2cd6-ceab-0106-3044af05e6a0.png)
![Screenshot_20190916-141806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/5ce22841-f2ec-cc05-c899-4082977c725a.png)




## 5-3. cURLコマンドを使う方法

```shell:curlコマンド
curl -X POST https://fcm.googleapis.com/fcm/send -H 'Authorization: key=＜APIキー＞' -H 'Content-Type: application/json' -d '{
"notification" : { 
"title": "マッチングが成立しました",
"body": "メッセージを送りましょう！",
"sound":"default",
"icon":"@android:drawable/sym_action_chat",
"color":"#FF8000"
} , 
"to" : "＜トークン＞",
"priority":"high"
}'
```
※Macからは動作確認済み
※Windows環境ではうまくいかないようです...（原因調査中）

###Postmanから、cURLコマンドを作成する際の注意
Postmanを使うと、cURLコマンドが簡単に生成できます

**Postmanの画面右上「Code」を選択。**
![screenshot_64.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/b7a7e706-29e6-9eb7-ce41-6e9254775fce.png)

**「言語選択」のところで、「cURL」を選択すると、cURLコマンドが一瞬で生成される**
![screenshot_65.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/91188ff2-ecee-7a35-42aa-eec11ae75262.png)
![screenshot_66.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/8ec4b9d7-c68e-f1d1-5dbb-ca807bb9f100.png)




ただ、残念なことに、ここで生成されるcURLはインデントの関係で、そのままでは動きません。
不要な要素や、インデントを修正すると、上に記載したコマンドと同じ形になります。





## 5-4. Node.jsを使う方法

PCにNode.jsが入っている場合、
下記コードで、通知を送れます。（追加のパッケージ等は不要）

```javascript:sendnotify.js
var http = require("https");

var options = {
  "method": "POST",
  "hostname": "fcm.googleapis.com",
  "path": "/fcm/send",
  "headers": {
    "Authorization": "key=＜APIキー＞",
    "Content-Type": "application/json",
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write(JSON.stringify({ notification: 
   { title: 'マッチングが成立しました',
     body: 'メッセージを送りましょう！',
     sound: 'default',
     icon: '@android:drawable/sym_action_chat',
     color: '#FF8000' },
  to: '＜トークン＞',
  priority: 'high' }));
req.end();
```

上記jsファイルを適当なディレクトリに作成し、コマンドプロンプト（ターミナル）から、実行することで、通知が送れます。

```shell:コマンド例
cd C:\Users\＜ユーザー名＞\Desktop\work_dir
node sendnotify.js
```

For文やWhile文と組み合わせて、通知の嵐を体験してみましょう。**モテキが来たように錯覚します。**

###注：Postmanから、Node.jsコードを作成する際の注意。
PostmanからNode.jsのコードを簡単に作成できます。

**Postmanの画面右上「Code」を選択**
![screenshot_64.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/ee63750a-0276-0661-5bbf-ec70a45c411a.png)

**「言語選択」のところで、「Node」→「Native」を選択すると、コードが一瞬で生成される**
![screenshot_67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/ec7c4ae0-2b4d-5e06-7eba-992f8ae036dc.png)
![screenshot_68.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341404/272070b0-1212-8f80-10f1-5beaa7cd9ad0.png)



**コードの修正**
しかし残念なことに、ここで生成されるコードはいつくか修正が必要です。

- まず`"headers"`から、リクエストに不要な項目を削除します。
    - 具体的には、`"Authorization"` と `"Content-Type"`以外は不要です。
- つぎに、`var options = {...}` の中の`"hostname"`と`"path"`を以下のように修正します。

```js

"hostname": "fcm.googleapis.com",
"path": "/fcm/send",
```

上記の修正を行うと、上に記載したコードと同じ形になります。


# 補足
### 参考記事
**Firebase公式ドキュメント**
・[Android プロジェクトに Firebase を追加する](https://firebase.google.com/docs/android/setup?hl=ja)
・[Android で Firebase Cloud Messaging クライアント アプリを設定する](https://firebase.google.com/docs/cloud-messaging/android/client?hl=ja)

**Qiita先行記事（おすすめ）**
・[AndroidアプリにFirebase Cloud Messagingを実装する(2) - アプリでメッセージを受信する]
(https://qiita.com/outerlet/items/49a5346ba206eaf877d5)
・[AndroidのPush通知(FCM)をサーバー知識無しで試してみよう](https://qiita.com/flatfisher/items/bdec83caf3c7f9c8917c)


### 本当は...
マッチングアプリをテーマにしましたが、
実は怖くて使ったことがないという... ・ω・