Firebase Notificationを使用してiOS端末にPush通知を送信する

# はじめに
この記事は[Hamee Advent Calendar 2016](http://qiita.com/advent-calendar/2016/hamee "Hamee Advent Calendar 2016")の18日目の記事です。

普段の業務でiOSアプリ開発に携わっているのですが、今回はiOS端末のPush通知をFirebase Notificationを使用して実装する流れを簡潔に書きます。

# Firebaseとは？
超絶ざっくりと説明するとFirebaseは2011年にアメリカで開始したMBaasですが，2014年にGoogleに買収されたサービスです。
今回は、Firebase Cloud MessagingしFirebase NotificationからPush通知をすることしか書かないので、Firebaseが提供する諸々の機能などについては[Firebaseの公式サイトの機能説明](https://firebase.google.com/features/?hl=ja "Firebase")をご覧ください。

# Firebase console上で新規プロジェクトの作成
まず、[Firebase console](https://console.firebase.google.com/)で新規プロジェクトを作成します。
![スクリーンショット 2016-12-18 21.48.02.png](https://qiita-image-store.s3.amazonaws.com/0/48864/71d33202-6be9-0f12-8032-80e64ce37c43.png)

プロジェクト名/国・地域を入力し作成ボタンを押します。
![スクリーンショット 2016-12-18 20.36.37.png](https://qiita-image-store.s3.amazonaws.com/0/48864/f627b06f-feea-5d25-f9be-db8d5705c5e0.png)

作成したプロジェクト上でiOSアプリにFirebaseを追加を選択します。
![スクリーンショット 2016-12-18 21.58.18.png](https://qiita-image-store.s3.amazonaws.com/0/48864/89f04ba0-1a25-3012-a61a-5eb4fe881f8c.png)
iOSバンドルIDはPush通知を実装するアプリのBundle Identiferと同じにしてください。

# Xcode上で新規プロジェクトの作成
push通知を実装するプロジェクトを作成してください。
プロジェクトのBundle Identiferは先程、作成したFirebase上のプロジェクトのiOSバンドルIDと同じにしてください。
cocoaPodsでfirebaseをインストールします。
次に、XcodeプロジェクトのPush NotificationsをONに設定します。
![スクリーンショット 2016-12-18 22.09.04.png](https://qiita-image-store.s3.amazonaws.com/0/48864/dc8f5159-7e21-ca95-d00c-b8aad6dbca33.png)
そして、先程Firebase console上でiOSアプリにFirebaseを追加の②で作成したファイルをXcode上のプロジェクトにコピーします。
![スクリーンショット 2016-12-18 22.09.04.png](https://qiita-image-store.s3.amazonaws.com/0/48864/2386e502-19f3-afdc-b781-1abf6f4400d3.png)
これでXcode上のプロジェクトの設定は完了です。

# AppDelegate.swiftに通知処理の実装をする
まずimport文を記述します。

```Swift
import Firebase
```
そして、application:didFinishLaunchingWithOptionsメソッドに

```Swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        //プッシュ通知設定登録
        let notificationSettings = UIUserNotificationSettings(
            forTypes: [.Badge, .Sound, .Alert], categories: nil)
         application.registerUserNotificationSettings(notificationSettings)
        
        application.registerForRemoteNotifications()
        FIRApp.configure()
        return true
    }
```
上記を記述します。

# プッシュ通知を送信する
先程、作成したfirebaseプロジェクトの設定画面に証明書をアップロードします。
![スクリーンショット 2016-12-18 20.47.53.png](https://qiita-image-store.s3.amazonaws.com/0/48864/6cafc47c-13bb-8d36-2136-08a7aba5a679.png)
[証明書の発行方法はこちらから](https://firebase.google.com/docs/cloud-messaging/ios/certs )

アップロードが完了したらxcodeプロジェクトのアプリを端末で起動します。
プッシュ通知許可ダイアログが表示されるのでOKを選択してください。
![IMG_0120.PNG](https://qiita-image-store.s3.amazonaws.com/0/48864/2709c74e-a398-f262-a656-ed877649064f.png)
起動したアプリをバックグラウンドに待機させて
firebase consoleのNotificationsからメッセージを送信します。
![スクリーンショット 2016-12-18 21.12.48.png](https://qiita-image-store.s3.amazonaws.com/0/48864/05755a49-65e8-c30d-8213-0dbbaea1434a.png)
するとPush通知がピコーンと飛んできます！
![IMG_0121.PNG](https://qiita-image-store.s3.amazonaws.com/0/48864/1dd4376c-af9d-848d-0728-01dcd5e0887d.png)

# おわりに
いかがでしょうか？無事Push通知は飛んできましたでしょうか？
FirebaseにはDynamic linksという機能もありPush通知を使用して、アプリ内の狙った箇所にPush通知を起点として画面遷移をすることももちろん可能です！

いろいろなPush通知サービスはたくさんありますが、GoogleがFirebaseを買収しより本格的にサービスを成長させていくと思うので、まだ他社のPush通知サービスと比較すると使いにくい所もありますが是非、Firebaseを使ってみてください!Firebaseは機能が豊富！

Firebaseは奥が深いぞ！