2週遅れではじめるFirebase（Firebase Notifications編）


![image00.png](https://qiita-image-store.s3.amazonaws.com/0/25250/8e55d1d4-ecf4-276d-0e58-4f43ce3307c6.png "image00.png")

今回は、Firebaseのconsoleから、アプリを登録してPush通知をアプリで受信できるようにするまでの方法を調査しましたので、メモとして残します。

# 環境

- OS X El Captian 10.11.5
- Xcode7.3.1
- cocoapods-1.0.1
- Swift2.2
- fastlane 1.95.0

# 組み込み方法

## fastlaneのインストール

今回は、Push通知に必要なApple Push Notification service SSL Certificatesをfastlaneで作成していきますので、インストールしていきます。

[Github](https://github.com/fastlane/fastlane)上のドキュメントを参考にインストールしていきます。

```
sudo gem install fastlane --verbose
```
>
System Requirements: fastlane requires Mac OS X or Linux with Ruby 2.0.0 or above

とありますので、ご自身の環境をご確認ください。
インストールすると、諸々のツール群がインストールされ、その中の```pem```というツールを使って、Apple Push Notification service SSL Certificatesと、Firebaseにアップロードする.p12ファイルを生成します。

## App IDの発行

iOS Developer CenterのCertificates, Identifiers & ProfilesでApp IDを発行しておきます。
これを元に、fastlaneがよしなにやってくれます。

## Xcodeでプロジェクトを作成

既存のプロジェクトでも構いませんが、FirebaseのNotificatiosを利用するプロジェクトを用意します。



## Firebaseのconsoleでアプリを登録する

こちらの[URL](https://console.firebase.google.com/)からGoogleアカウントでログインします。
アカウントが無い場合は、作成してください。
```CREATE NEW PROJECT```をクリックして、新規アプリを作成します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/5bb49bb9-7598-c617-96f3-409092526a21.png" width="600">

```Project name```、```Country/region```を入力し、```CREATE PROJECT```をクリックします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/0c8775ce-c96c-d7d5-23a2-5520dff871e4.png" width="600">

上記のような画面になるので、```Notifications```を選択します。（下の方にあります）

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/fa159144-b190-e67f-7c10-a028f310d831.png" width="600">

今回は、iOSアプリを作成しますので、```iOS```を選択します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/40dfb643-6543-4dfd-b149-d0c4bd3b16de.png" width="600">

```iOS bundle ID```を入力（App IDとおなじもの）して、```ADD APP```を選択します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/a67be39d-34f8-b090-5e13-5d2fcf298276.png" width="600">

そうすると、plistファイルがダウンロードできるようになるので、後ほどプロジェクトに組み込みます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/25c8de70-d28a-d587-bc4e-7402de6f407e.png" width="600">

次に、[cocoapods](https://cocoapods.org/)を使用したSDKの組み込み方法と、実装手順が表示されますので、それをもとに実装していきます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/cf90a149-8711-f2d1-b64d-d6c540fc19ba.png" width="600">

## Xcodeでプロジェクトの設定をする

では実際に組み込んで行きましょう。cocoapodsでSDKをインストールするので、次のコマンドで```Podfile```のテンプレートを作成します。

```
pod init
```
次にインストールする、ライブラリを記述していきます。cocoapods-1.0.1を入れている場合は、テンプレートが変更がありますので、よければ[こちらの記事](http://qiita.com/mfks17/items/39a1c53ca23c29863e1d)をご覧下さい。

```
pod 'Firebase/Core'
pod 'Firebase/Messaging'
```

```
⚡ pod install
Updating local specs repositories

CocoaPods 1.0.1 is available.
To update use: `sudo gem install cocoapods`
Until we reach version 1.0 the features of CocoaPods can and will change.
We strongly recommend that you use the latest version at all times.

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Analyzing dependencies
Downloading dependencies
Installing Firebase (3.2.1)
Installing FirebaseAnalytics (3.2.0)
Installing FirebaseInstanceID (1.0.6)
Installing FirebaseMessaging (1.1.0)
Installing GoogleIPhoneUtilities (1.2.1)
Installing GoogleInterchangeUtilities (1.2.1)
Installing GoogleSymbolUtilities (1.1.1)
Installing GoogleUtilities (1.3.1)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 8 total pods installed.
```

次に、先程ダウンロードしたplistをプロジェクトに組み込みます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/3e2f55b6-907d-59d5-3595-de872e62ad41.png" width="600">

ドラッグ＆ドロップするのみで、Google SignInで実装したような事は必要ありません。

- [Google Platform on iOS で簡単Google認証 2016年版](http://qiita.com/mfks17/items/71ba2ec2edbc00726a7d)

次に必要最低限のコードを追加していきます。

```AppDelegate.swift
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    FIRApp.configure()

    let types: UIUserNotificationType = [UIUserNotificationType.Badge, UIUserNotificationType.Alert, UIUserNotificationType.Sound]
    let settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )

    application.registerUserNotificationSettings( settings )
    application.registerForRemoteNotifications()
    return true
}
    
func registerForPushNotifications(application: UIApplication) {
    let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()
}

func tokenRefreshNotificaiton(notification: NSNotification) {
    let refreshedToken = FIRInstanceID.instanceID().token()!

}
```

## Apple Push Notification service SSL Certificatesをpemで作成し、Firebaseのconsoleに.p12ファイルをアップロードする

Push通知用の証明書ファイルを```cert```コマンドで作る

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/22bf7d06-6c40-ffe9-5cb0-874d6921da4b.png" width="600">


因みに開発用は

```
cert --development
```
で生成されます

Push通知用のpemファイルを```pem``` で作ります


<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/c5ef5558-9b95-6396-6082-d3c6e45b80f0.png" width="600">



因みに開発用は

```
pem --development
```
で生成されます
これにより、iOS Developer Centerに、Push通知の証明書がアップロードされていますので、Firebaseのコンソールより、p12ファイルをアップロードすれば、準備はほぼ完了です。

## Firebase consoleでの設定

[https://console.firebase.google.com/](https://console.firebase.google.com/)にアクセスして、該当のプロジェクトの設定画面へ進みます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/6273272f-d5ae-e8be-0fff-e89bcbe1548a.png" width="480">

プロジェクト名の右にある、設定から```Project settings```をクリックします。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/9fe8eff2-0c80-267b-cdeb-905696da08aa.png" width="480">

```Settings```から、```CLOUD MESSAGING```タブを選択しあます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/07f3d4b8-10f4-16c5-e084-a396fa0941e5.png" width="800">

先程作成した、p12ファイルを開発用、本番用をアップロードします。

## Firebase consoleからメッセージを送る

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/854b4b49-ba90-d192-6700-16f70bfb95cb.png" width="600">

```SEND YOUR FIRST MESSAGE```から、メッセージの管理画面に遷移する。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/f53e110b-1a5a-75f4-ae8a-ab5de275aec6.png" width="600">

```Message text```に通知するメッセージを入力します。```Message label```は任意で入力して、```Delivery date```今送るか、時間指定で送るかを選択できます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/6874b7fb-6ee2-f945-19f8-649f86102173.png" width="600">

時間していは、タイムゾーンなども細かく指定する事ができます。
今回は、アプリ単位で全ユーザにPush通知をおくるので、```Target```は```User segment```にして、Appを該当のものを選択します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/25ee89eb-a5ee-fa64-1988-33f19b90a3e0.png" width="600">

あとは確認して、Pushを送るのみです。
お疲れさまでした。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/566a18ab-c48f-9fb8-815a-bb4b51dfb8dc.png" width="300">

# 終わりに

コンソールがわかりにくい部分もありましたが、Push通知の実装をする事ができましまた。まだ、Topic、Single device向けのPushの実装は試すことができていないので、次の機会に試したいと思います。

# 謝辞

- [【iOS】Firebase の Notifications でプッシュ通知を送る](http://qiita.com/koogawa/items/ca8cce019b4ff7ce2576)
- [Firebase](https://firebase.google.com/)
- [fastlane の pem を使って一瞬で iOS 用の Push 通知 (Apple Push Notification Service) の証明書を作る](http://qiita.com/mironal/items/7fab4bf3bf2243a5fc90)
- [Firebaseによるプッシュ通知のハマりどころ](http://qiita.com/mituoh/items/2dc87618edf234afd8f0)
- [FirebaseのPush通知をiOSで使ってみる](http://qiita.com/jiiikki/items/31f294cf2afcfe8d868d)
- [FirebaseでPush Notification - 3件目](http://qiita.com/sonsongithub@github/items/44b5720c58d6b0bb9e30)
- [SwiftでFirebaseを使ってNotificationを送ってみた（が、色々詰まった話）](http://qiita.com/uti/items/31e44aacadc7d7ef439a)