【iOS】「ベースといえば、◯◯ベース！」

弊社エンジニア　「えむべーすの件なんですが」
弊社マネージャー「ああ、mBaaS(エムバース)ね」
弊社営業　　　　「ベースといえば、ホワイトベース！」

![30f1b3cc.jpg](https://qiita-image-store.s3.amazonaws.com/0/84014/d517facd-d68f-3844-7594-69fccf4253bd.jpeg)

# きっかけ

先日のWWDCキーノートでの一番のインパクトだった、
"AppleMusicに歌詞がつく"というニュースを受け、
(あくまで個人の意見です。)
待ちきれず、ついにDevelopperProgramに登録してしまいました。

「せっかく登録したし、firebaseのプッシュ通知機能を試してみよう」
と思ったのが事の次第です。

ちなみにまだ歌詞は表示されないようです。。。

# 手順

**①firebase上でプロジェクトを作成**  
**②プロジェクトにiOSアプリを追加**  
**③Xcodeプロジェクトにplistを追加**  
**④AppDelegateを実装**  
**⑤firebaseにp.12ファイルを登録**  
**⑥送信！**

## ①firebase上でプロジェクトを作成

firebase上のプロジェクトは、
```
project
├── iOS
├── Android
└── Web
```
といったように、複数のアプリケーションの総称です。
以下に従い、プロジェクトを作成します。

![スクリーンショット 2016-06-19 21.25.30.png](https://qiita-image-store.s3.amazonaws.com/0/84014/d957c825-551f-0a04-46a0-0bf2f7d351d4.png)

## ②プロジェクトにiOSアプリを作成

「アプリを追加」からiOSを選択します。

![スクリーンショット 2016-06-19 21.28.35.png](https://qiita-image-store.s3.amazonaws.com/0/84014/525c0f64-4ba7-3712-0558-cea1c904da98.png)

![スクリーンショット 2016-06-19 21.30.08.png](https://qiita-image-store.s3.amazonaws.com/0/84014/4d5ea78b-1461-7ba9-8856-3025873aa153.png)

**ポイント**：ここでのiOSバンドルIDはApp IDと同一のものです。

## ③Xcodeプロジェクトにplistを追加

firebaseでアプリを追加すると自動でplistファイルがダウンロードされるので、
firebaseの指示に従い、Xcodeプロジェクトにplistを追加します。

![スクリーンショット 2016-06-19 21.31.55.png](https://qiita-image-store.s3.amazonaws.com/0/84014/3650878c-66dd-91cc-adac-b336bf50f792.png)

## ④AppDelegateを実装

以下のように実装します。
firebaseに関わるのはimport含めたった3行です。

```swift
import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        let types: UIUserNotificationType = [.Badge, .Sound, .Alert]
        let settings = UIUserNotificationSettings(forTypes: types, categories: nil)
        application.registerUserNotificationSettings(settings)
        
        FIRApp.configure()
        
        return true
    }
    
    func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
        
        if notificationSettings.types != .None {
            
            application.registerForRemoteNotifications()
        }
    }
    
    func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        
        FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .Unknown)
    }
}
```

## ⑤firebaseにp.12ファイルを登録

[Provisioning APNs SSL Certificates](https://firebase.google.com/docs/cloud-messaging/ios/certs#configure_an_app_id_for_push_notifications)
を参考に、p.12ファイルを書き出し、

firebaseの
プロジェクトの設定->クラウドメッセージング
にp.12ファイルを登録します。

![スクリーンショット 2016-06-19 21.36.55.png](https://qiita-image-store.s3.amazonaws.com/0/84014/0de25f05-0e67-1705-a89f-65a598c333ab.png)

## ⑥送信！

Notificationからメッセージを送信します。

![IMG_0085.jpg](https://qiita-image-store.s3.amazonaws.com/0/84014/8c6474cd-68b8-6bb9-a118-65e71e865fae.jpeg)

簡単！

# 終わりに
ささっとプッシュ通知が実装できるし、Androidの対応や解析もできる。
「ベースといえば、firebase！」
かもしれません。

以上です。
![Cn0Ia.jpeg](https://qiita-image-store.s3.amazonaws.com/0/84014/72a93061-26cb-1fb3-b103-8f7061f7083d.jpeg)

# 参考
[【iOS】Firebase の Notifications でプッシュ通知を送る](http://qiita.com/koogawa/items/ca8cce019b4ff7ce2576)
大変参考になりました。ありがとうございます。