FirebaseのPush通知をiOSで使ってみる

#Firebaseのpush通知を使ってみたいと思って挑戦しました

xcodeでシングルページの新規プロジェクトを用意しておいてください
証明書の作り方も書きました

#firebaseをiosアプリに追加
とりあえずfirebaseのアカウントを作成
googleアカウントを持っていれば一瞬で終わります

新規プロジェクトを作成してiosにアプリにfirebaseを追加を選択
<img width="923" alt="screenshot.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/c62f1118-a4ef-9d27-7b73-b5783b527049.png">

<br/>
アプリの詳細を記入したら
GoogleService-Info.plist ファイルを Xcode プロジェクトのルートに移動し、すべてのターゲットに追加してください
<img width="678" alt="screenshot1.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/ca8c28a6-5011-e8fb-974a-898827c5f622.png">

<br/>
<img width="673" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/e76f52b0-80e8-f4b2-0eb9-9ffaaa491b03.png">

ターミナルでアプリケーションのXcodeプロジェクトの場所に移動してください
podfile作成

```
pod init
```
vimで編集

```
vim podfile
```
pod 'Firebase/Messaging'をtargetとendの間に入れる

```
target 'アプリ名' do
pod 'Firebase/Messaging'
end
```

インストール
```
pod install
```

<img width="350" alt="screenshot5.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/8d27e5f0-b293-95b6-69d4-1a4ec26c629f.png">



インストール完了です
workspaceファイルを開いてください
<img width="187" alt="スクリーンショット 2016-05-23 15.54.14 1.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/1a371e29-b6fb-03ae-498a-4390ac0c035a.png">


次にAPNs証明書の作成をしていきます


#APNs証明書の作成（.p12）

キーチェーンアクセスを開いて左上のメニューから
証明書アシスタントを選んで
認証局から証明書を要求を選択

<img width="609" alt="6.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/c72af7a4-0aa7-35d9-8092-57cee397b1ed.png">




メールアドレスと通称を記入
ディスクに保存で続けるをクリック

<img width="410" alt="7.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/60ede279-d676-e0a6-9aec-41ecc8fbac29.png">


作ったらDeveloper.apple.comにアクセスしてCertificates, Identifiers & Profiles
のAppIDsを選ぶ


<img width="982" alt="9.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/d598c9ac-4e22-5608-3b1e-f55034bbd020.png">


<img width="651" alt="10.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/f133e166-4c8f-eafc-f9ca-861ccd45ca63.png">


開発中のアプリのBundle IDを記入する
target->GeneralでBundle Identifierの部分です

<img width="720" alt="11.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/17d6e413-0585-0e8a-81b3-ec43fde4b6c9.png">


Push Notificationsを選択して
<img width="708" alt="12.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/66dbd546-6a16-9a2c-bb95-70d98d565fbb.png">

continueをクリック


<img width="638" alt="13.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/edbe5fa0-9e93-ab84-bfe8-9281778f1c9a.png">


Registerを押す


できたら
IdentifiersでAppIDsで作ったものを選択

<img width="692" alt="14.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/7cf96155-035a-9704-3879-2e95d5c9eaab.png">



下にあるEditをクリック

そうしたらまた下の方にある
<img width="708" alt="15.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/46f76619-0dfa-e2a7-da0f-910d77aaa86d.png">

Development SSL Certificateの方に先ほどキーチェーンアクセスで作った
CertificateSigningRequest.certSigningRequestをアップロードする

<img width="576" alt="16.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/d3cdf044-7730-2d04-a972-4d80ad3b150c.png">



<img width="708" alt="17.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/67662d8b-dab8-432e-6f70-9a083a3ffdb6.png">



<img width="720" alt="18.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/a8daaab5-feec-22c2-2c85-e92567fa3da1.png">


<img width="690" alt="19.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/963b940b-c35e-10b9-7bc5-34e1f9c2e8b7.png">



Downloadする

ダウンロードしたaps_development.cerをダブルクリック

証明書がキーチェーンアクセスに追加されて
秘密鍵も生成されている
↓こんな感じです
<img width="53" alt="20.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/b709d6f4-b50e-fdee-7317-0b6be30d3eab.png">

ファイルマークを右クリックしてExport(〜を書き出す)する

<img width="403" alt="21.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/c7bb60ee-080f-51bf-b5e9-4ad9abd73d50.png">

パスワードを設定するかどうかは任意です
セキュリティを高めるにはつけたほうがいいでしょう

↓APNs証明書(.p12)

<img width="108" alt="22.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/099659d6-29cc-004c-e05c-804b2da03380.png">


APNs証明書ができました

次にプロビジョニングファイルを作っていきます
Certificates, Identifiers & Profiles
に戻りProvisioning ProfilesのDevelopmentをクリック
<img width="246" alt="p1.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/c336edbc-0944-e148-63b3-59be8d31b1b2.png">

＋を押して
<img width="730" alt="p2.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/5db9d42c-5f41-d06d-3033-648e0bf1f564.png">


<img width="709" alt="p3.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/dfe982d0-acbe-33cb-4d1a-b9dcfadf306d.png">

continue
開発しているAppIDを選択
<img width="631" alt="p4.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/d269674b-6e17-7ab5-8fb1-6f9afa684b54.png">

<img width="572" alt="p5.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/50a6ccca-efd7-1c2d-5d3d-2002726083fb.png">
continue

<img width="166" alt="p6.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/470a1204-2b01-2c21-2215-16cac7b1ba12.png">


download
ダウンロードしたファイルをダブルクリック

#APNs証明書をFirebaseにアップロードします

設定->クラウドメッセージを選択

<img width="769" alt="23.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/06a3865d-6ea6-5175-9532-1384fc33715b.png">

開発用APNs証明書を選択して先ほど作ったp12をアップロードする
<img width="671" alt="24.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/ee070c1e-24cf-f65b-0c25-d3c82787ae2a.png">



これでFirebaseの準備はできました

今度はXcodeでプロジェクトをいじっていきます

#Xcodeでプロジェクトを編集する

AppDelegate.swift

```
import Firebase
```

```
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        let notificationSettings = UIUserNotificationSettings(
            forTypes: [.Badge, .Sound, .Alert], categories: nil)
        application.registerUserNotificationSettings(notificationSettings)
        FIRApp.configure()
 return true
    }
```


```
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
        var tokenString = ""
        
        for i in 0..<deviceToken.length {
            tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
        }
        
        FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Unknown)
    }

```


Info.plistの編集
Information Property Listに
FirebaseAppDelegateProxyEnabledを追加して
NOに設定

<img width="522" alt="25.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/40e0ec01-a933-4c55-27c8-72d6c08bd7af.png">

最後にtargetを選択
capabilitiesを選択して
push notificationをオン

<img width="678" alt="26.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/ab2767f1-4985-8af9-4966-b7faa88e44ef.png">


あと下の
Background Modes
Remote notificationsもオンにしてください

<img width="681" alt="27.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/5d01e84a-4d8e-768f-47d5-138c9452bc0e.png">

以上で終了です

iPhoneにこのアプリをインストールしてください


#Push通知を送ってみる



アプリをインストール
<img width="380" alt="30.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/6998be4e-f9da-1036-f942-cf13d8cba976.png">

OKをタップ
初めての通知を送ってみましょう

iPhoneはロック画面かホーム画面にしておきましょう

Notificationsを選択して

<img width="922" alt="28.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/e58e94ef-06b1-534b-4664-a93252588287.png">

<img width="772" alt="29.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/c7c8f5f6-5e8e-8393-0c02-d75c17641045.png">


Push通知を確認
<img width="380" alt="31.png" src="https://qiita-image-store.s3.amazonaws.com/0/66763/7562b4e3-61db-3fa3-fe60-9a3063dba3fd.png">