Perfect APNs編

サーバーサイドSwiftフレームワークのPerfectの使い方のメモその3

今回はiOSのプッシュ通知を送信する方法について

Perfectは最新のAPNsの通信形式に対応していて、細かなエラーレスポンスを取れるのがメリット。 なので、開発用としては大変使いやすい

手順

Push通知はサーバ側で微妙に必要とされる証明書が変わったりするのがややこしいところ。 PerfectでPush通知を送るのに必要なものは以下の通り

登録〜プロビジョニングプロファイルと証明書の作成

証明書の取得にはAppIDの登録やら結構手順があって大変だが、まずは以下のリンク先の通りに作業をすればOK

Qiita:プッシュ通知に必要な証明書の作り方2016

なお、最後の手順のAPNs用証明書(.p12)を書き出す時のファイル名はapns.p12とする

サーバ用の証明書の準備

APNs用証明書(.pem)

ターミナルで以下を実行してapns_dev_cert.pemを作成する

cd [apns.p12を書き出した場所]
openssl pkcs12 -clcerts -nokeys -out apns_dev_cert.pem -in apns.p12

秘密鍵(.pem)

ターミナルで以下を実行してapns_dev_key.pemを作成する

cd [apns.p12を書き出した場所]
openssl pkcs12 -nocerts -out apns_dev_key.pem -in apns.p12

Enter PEM pass phrase:と秘密鍵のパスフレーズを聞かれるので、適当なものを入れる。 後でサーバに設定するので忘れないように・・・

CAルート証明書

APNsとサーバで接続する為にEntrustの証明書が必要なので、以下からダウンロードする

Entrust.net Certificate Authority (2048): entrust_2048_ca.cer
Entrustの証明書DLページ - Entrust.net Certificate Authority (2048) - Download)

iOSアプリの作成

とりあえず、必要最低限でPush通知を受信できる状態にする。 デバイストークンの更新等には未対応なので注意

プロジェクトの設定

アプリの実装

AppDelegateに以下の実装をする

コードにすると以下の通り

これを実機上で実行すると、端末のデバイストークンがログ出力される

デバッグ実行を停止させると、Push通知が届かない場合があるので、デバッグ実行したままにするか 再度実機上からアクティブにしてバックグラウンドに落としておく。

また、マルチタスクから終了させても届かない場合があるので、注意

サーバへ証明書の設置

基礎編のビルドでファイルを配置するの方法で証明書を配置する

webrootへのドキュメントの配置とは別にCopy Filesを設定する)

サーバの実装

サーバ側での実装は主に2つ。 ひとつは証明書をNotificationPusherに初期設定するのと、 もう一つは実際にPush通知を送る実装

初期設定は一度だけ行えばOKなので、(実環境では送信毎にチェックした方が良いけど) 今回はPerfectServerModuleInitで行う

Push通知の送信は、IOSNotificationItemの配列 (ここのenumの使い方は参考になる)で送信内容を作成し、 NotificationPusher().pushIOSで送信を行う

この実装でサーバにアクセスする度に、Push通知が端末へ送られる。 送信時の結果は、ブラウザに表示される(エラーであればエラー内容)

感想

今回の一番大変だったのはEntrustの証明書の置き場が変わっていたこと。。。 逆に言えばそれ以外はとても簡単にPush通知を送れる環境を作れた感じ

巷にはたくさんAPNsに対応したフレームワークやサービスがあるけど、 開発用としては、このPerfectが一番手軽で確実だと思う。 なにせ環境構築は不要で、Xcodeでプロジェクトを作って 少し実装すれば良いだけという素晴らしさ!

もちろん、商用はAWSとかがオススメだけど。。。

参考リンク

開発環境