iOSでプッシュ通知を実装する方法の超詳細まとめ(前編)


APNS アイキャッチ

※当ブログではアフィリエイト広告を利用しています。

現在業務でiOSアプリを細々と作っていたりするのですが、APNS(Apple Push Notification Service)を利用したリモートプッシュ通知を実装する際にいろいろ手間取った点がありました。

実装するまでの手順をできるだけ詳細にまとめてみます。長いのでエントリを前編・後編に分けます。前編は「概要~プロビジョニングプロファイル」の準備の手順です。

APNS(Apple Push Notification Service)を利用したプッシュ通知の流れ

プッシュ通知についての概要はApple公式ドキュメント「Local および Push Notification プログラミングガイド」で解説されていますが、単純化すると下記の流れとなります。

  • iPhone・iPadのアプリでプッシュ通知を許可し、APNSからデバイストークンを取得
  • デバイストークンを何らかの方法でプロバイダに送信
  • プロバイダよりプッシュ許可したデバイスを対象にAPNS通知を依頼
  • APNSからデバイスへ通知し、デバイスでサウンド・バッジ・アラート等を出す
プッシュ通知許可とデバイストークンの取得

プッシュ通知許可とデバイストークンの取得

プロバイダからAPNS~デバイスへの通知

プロバイダからAPNS~デバイスへの通知

事前準備

プッシュ通知を実装するためには下記のものが必要となります。

プロバイダ証明書

プロバイダとAPNS間でのSSL通信時に必要な証明書で、APNS側で証明書を検証する際に必要となります。
Appleの開発者サイトより取得します。後述しますが開発用と製品用で証明書は別のものが必要です。

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

プッシュ通知を実施するアプリのApp IDを指定したプロファイルで、アプリをビルドする際に組み込みます。
Appleの開発者サイトより取得します。これも開発用と製品用で別のものが必要です。

ルート証明書

APNsから取得したサーバ証明書をプロバイダ側で検証するために必要です。
Entrustのサイトより取得します。

APNSと通信するためのプロバイダ

プロバイダ側の仕組みはいくつかあるようですが、オープンソースのプログラム「apns-php」を使用した方法を記載します。
別途、PHPが動作するサーバーが必要です。

デバイストークン

APNsが初めてデバイスに接続したときに、APNsからそのデバイスに渡されるデバイス識別子です。
プロバイダからデバイストークンを指定して通知を行うことで、対象のデバイスにプッシュ通知が届きます。

プロバイダ証明書の準備

プロバイダ証明書はAppleのデベロッパサイトより取得します。取得の流れは以下の通りです

  • App IDの登録
  • プッシュ通知の有効化と証明書のダウンロード
  • 証明書を所定の形式(*.pem)に変換

App IDの登録

iOS Dev Centerにアクセスし、開発者登録されているIDでログインします。
https://developer.apple.com/devcenter/ios/index.action

Certificates,Identifiers & Profilesを開きます
Certificates,Identifiers & Profiles
Identifiersを開きます
Identifiers
右上の「+」ボタンを押下し、App IDの新規登録画面を開きます
App IDs
アプリの詳細を入力し、Continueボタンを押下します

項目 概要
App ID Description App IDsの一覧で表示される名称です。アプリの概要を表す名称を入力します。
App ID Suffix Explicit App IDを選択し、アプリのBundle Identifierと同様の名称を入力します。
※ワイルドカードは使用できません。
例)com.yourcompany.AppName
App Services アプリで使用するサービスです。プッシュ通知を利用するため「Push Notification」をチェックします。

App IDの登録
内容を確認し、Submitを押下します
内容の確認
登録が完了すると「Registration Complete」と表示されるため、Doneを押下します。
登録の完了
App IDsより、IDが登録されたことを確認します。
※この時点ではPush Notificationsが黄色の「Configurable」となっています。
App IDの登録完了確認

プッシュ通知の有効化と証明書のダウンロード

App IDで「Configurable」となっているプッシュ通知を有効にするため、認証局より証明書を取得します。

MACでキーチェーンアクセスを開き、証明書アシスタント⇒認証局に証明書を要求を開きます。
証明書の要求
証明書アシスタントで証明書情報を入力し、「続ける」を押下します。

項目 概要
ユーザのメールアドレス デベロッパ登録したメールアドレス
通称 デベロッパの名前(デベロッパ登録したものと同じでなくてもOKでした)
要求の処理 ディスクに保存を選択

証明書情報の入力
「CertificateSigningRequest.certSigningRequest」の保存画面となるため、任意の場所に保存します。
証明書要求の保存
保存が成功すると「証明書要求がディスク上に作成されました」というメッセージが表示されます。
保存の成功
iOS Developer Centerに戻り、登録したApp IDを選択し、Editより編集画面を開きます。
App IDの編集
編集画面の「Push Notifications」より、証明書を作成します。
証明書は開発用と製品用をそれぞれ必要に応じて作成する必要がありますが、手順は同じです。

Development SSL Certificate:開発用
Production SSL Certificate:製品用

Create Certificateを押下します。
証明書の作成
Continueを押下します。
証明書作成について
Choose Fileを押下するとファイル選択画面となるため、保存しておいた「CertificateSigningRequest.certSigningRequest」を指定します。
証明書要求の指定
「CertificateSigningRequest.certSigningRequest」が選択されたらGernerateボタンを押下します。
証明書の生成
証明書の作成に成功すると証明書がダウンロード可能になるため、Downloadボタンよりダウンロードします。
証明書のダウンロード
ダウンロードした証明書をダブルクリックすると、キーチェーンに登録されます。
今回は開発用(Development)の証明書のため、「Apple Development IOS Push Services」となっています。
キーチェーンへの登録
iOS Dev CenterのApp IDsより該当App IDを確認すると、「Push Notifications」が「Enabled」になっています。
製品用(Distribution)の証明書も同様の手順で作成すると「Enabled」になります。
プッシュ通知がEnabledになることの確認

証明書を所定の形式(*.pem)に変換

キーチェーンアクセスの左ペインより「証明書」を開き、該当証明書を選択した状態で、「”Apple Development IOS Push Services:アプリID”を書き出す」を選択します。
製品用の証明書を用意する場合は、「Apple Production IOS Push Services」の証明書について同様の手順を行います。とりあえず開発用で試したい場合は製品用は後から作ってもOKです。

開発用:Apple Development IOS Push Services
製品用:Apple Production IOS Push Services
証明書の書き出し
任意の場所へ、「個人情報交換(.p12)」の形式で保存します。
便宜上、今回はデスクトップに下記の名前で保存します。

開発用:push_develop.p12
製品用:push_production.p12
p12ファイルの書き出し
書き出した証明書のパスワード入力画面となるため、何も入力せずそのままOKを押下します。
証明書のパスワード
キーチェーンにアクセスするためのパスワードを聞かれた場合、入力します。
(通常、MACのログインパスワードと思います)
キーチェーンパスワードの入力
デスクトップにファイルが保存されたことを確認します。

開発用の証明書(p12)

開発用の証明書(p12)

製品用の証明書(p12)

製品用の証明書(p12)


MACのターミナルにて、下記コマンドで「個人情報交換(*.p12)」形式のファイルを「*.pem」形式の証明書に変換します。
p12形式のファイルがデスクトップにある場合のコマンドは下記の通りです。Enter Import Passwordは何も入力せずEnterでOKです。

開発用

cd ~/Desktop/
openssl pkcs12 -in push_develop.p12 -out server_certificates_sandbox.pem -nodes -clcerts
Enter Import Password:

製品用

cd ~/Desktop/
openssl pkcs12 -in push_production.p12 -out server_certificates_production.pem -nodes -clcerts
Enter Import Password:

変換に成功すると「MAC verified OK」と表示されます。
p12ファイルと同じ階層にpem形式のファイルが作成されます。

開発用:server_certificates_sandbox.pem
製品用:server_certificates_production.pem

pem形式の証明書

pem形式の証明書

プロビジョニングプロファイルの準備

アプリのビルド時に組み込むプロファイルを準備します。重要なのはプッシュ通知用に作成したApp IDを指定するところなので、作成方法をご存じの場合は後編まで飛ばしてしまってOKです。

iOS Dev CenterのCertificates,Identifiers & ProfilesよりProvisioning Profilesを開き、右上の「+」ボタンを押下します。
Provisioning Profileの新規追加
Provisioning Profileのタイプ(開発用・製品用)を選択する画面となるため、必要に応じて選択します。
開発用のProvisioning Profileを作成する場合、「iOS App Development」を選択します。製品用の場合は「Distribution」のいずれかを必要に応じて選択します。
プロビジョニングタイプの選択
プッシュ通知するアプリ用のApp IDを選択します。
App IDの選択
開発用のCertificates(iOS Development)を選択します。
開発用証明書の選択
開発に使用するデバイスを選択します。
開発用デバイスの選択
任意のプロファイル名を入力し、「Generate」を押下します。
プロファイル名の入力
プロファイル作成に成功したら「Download」ボタンを押下し、プロファイルをダウンロードします。
プロファイルのダウンロード
ダウンロードしたプロファイル(*.mobileprovision)をダブルクリックし、ライブラリに追加します。

前編はここまでです。
後編ではルート証明書の準備~プッシュ通知の実装を行います。

iOSでプッシュ通知を実装する方法の超詳細まとめ(後編)