iOS で PUSH 通知を受けるまでの手順

 iPhone/iPad上で動作する iOS のアプリケーションに対して PUSH 通知を送るまでの手順をまとめました。XCodeからビルドしてデバッグ実行でのPUSH通知受信と、Ad Hoc で端末にインストールした際のPUSH通知受信の両方を解説します。

Apple Developer Program への登録

 iOS アプリの開発、特に PUSH 通知を使う場合、必ず Apple Developer Program の操作をすることになりますので、Apple Developer Program に登録しましょう。登録までの期間は、弊社の実績で2営業日掛かりました。弊社の場合はFITS, Inc. という組織名(Team Name)が世界で重複していたため、最終的に FITS, INC. (Japan) という組織名への変更が必要でそのやり取りが入りましたので、それがなければ実際にはもう少し早く登録できた可能性があります。

開発用証明書の作成

 今後、プロビジョニングファイルの作成などに必要となるため、開発用の証明書(.cerファイル)を作成する必要があるのですがこの証明書ファイルを作るために証明書署名要求(CertificateSigningRequest.certSigningRequest)を作成する必要があります。こちらはMacであれば標準搭載されているキーチェーンアクセスから作成することができます。

App ID の作成

 アプリをユニークに識別し、プロビジョニングファイルを作成する際に必要となるApp IDを作成します。作成はIdentifiersメニューの+マークから可能です。

 Bundle ID にはいわゆる逆ドメイン.アプリ固有の名前を付けます。例として、プッシュのサンプルアプリなら jp.fits-inc.push-sampleなどです。

 今回はPUSH通知のアプリを作成するので、 Capabilities の Push Notifications にチェックを入れるのをお忘れなく。

 Description と Capabilities については後からでも変更可能なのであまり神経質にならなくても大丈夫です。Bundle ID については一度決めたら変更ができない(厳密には変更したら別な App ID となる)ため、typoなどがないよう注意して作成してください。

プロビジョニングプロファイルの作成

 作成したアプリを Ad Hoc などで配信するためにはプロビジョニングプロファイルの作成が必要となります。プロビジョニングプロファイルは下記画像のようにProfilesメニュー選択後の画面で+マークをクリックすることで作成可能です。プロビジョニングプロファイルに紐づける App IDや Device の UDID はあとから増減可能ですが、Typeについては後から変更できません。

APNs サーバと通信するための証明鍵の取得

 PUSH通知を送るためには、APNs(Apple Push Notification サービス)のサーバと通信を行う必要があります。APNsサーバとの通信にはp12形式の証明書またはp8形式の鍵が必要となるのですが、Provider サーバ(APNsサーバと直接通信するサーバ)が対応しているのであればp8形式の鍵がおススメです。
 このp8形式の鍵とp12形式の証明書の2種類が存在し、どちらを使ってもAPNs サーバと通信できる、ということを知らずに、前半をp12前提で後半をp8前提の手順書やドキュメントで進めると混乱しますのでご注意ください。
 p12形式の証明書、正確にはPKCS#12(Public Key Cryptography Standard#12)は、公開鍵証明書と秘密鍵をパスワードで暗号化したものです。Apple Developer Program で p12形式の証明書を作成する場合はAppIDを指定して作成するので、アプリごとに証明書を作り直す必要があります。一方 p8 形式の鍵はApple Developer Program の ID と紐づくため、アプリごとに作り直す必要がない(くわえて作成までの手間も少ない)ため、p8形式の鍵をおススメします。

Provider サーバの構築

 APNsサーバと通信するためのProviderサーバとしては、ニフクラ mobile backend を使う方法や、Firebase Cloud Messaging や AmazonSNS の APNs 向けインタフェースを使用して構築する方法がありますが、今回はお手軽に Docker のコンテナ(CentOS)にサクッと node で構築します。

Docker コンテナ起動

 今回使用を想定しているnode-apnは CentOS の7系でも8系でも動作を確認しているのですが、今回は CentOS 7 で説明を進めます。下記コマンドでコンテナを作成しbashを実行します。

docker run -it centos:cnetos7 bash

 簡単に入る Node.js の 10.x を入れます。レポジトリのインストールとパッケージのインストールを一気にやります。
※あくまでサンプルなので 10.x を入れてますが、10系は2021年4月にサポートが切れますので、12系の導入も検討してください。

# curl -sL https://rpm.nodesource.com/setup_10.x | bash -
# yum install nodejs