[iPhone] APNs プッシュ通知、リモート通知の取得

デバイストークンを取得し、プロバイダーに送信した後に
いよいよプロバイダーからの通知を取得します

  1. Client App から端末に APNs にSSL接続させ deviceToken を取得
  2. Client App が Provider に deviceToken を送出
  3. Provider がその deviceToken を使って特定端末に通知を送る
  4. Client App リモート通知受信のケース分け

テスト用のサーバーをProviderに見立てて、APNsを経由し、アプリで通知を取得する流れを試してみます
 
apns_1
 

サーバーに置くSSL証明書と鍵を作成

 

キーチェーンアクセスの「証明書」から、今回の証明書を選んで右クリック

“Apple Development iOS Push Service: xxx “を書き出す…
を選択
 
apns3_1
 
拡張子を p12 の個人情報交換にして
デスクトップに保存
 
apns3_2
 
書き出す証明書のパスワードを入力
何も無しでもでもできる
 
apns3_3
 
次に出るパスワードは Mac のログインなどに設定したPCのパスワードを入力
 
apns3_4
 
サーバーで使えるように p12形式を pem形式に変換します
ターミナルを起動して
 
apns3_5
 
「個人情報交換(*.p12)」形式のファイルを「*.pem」形式の証明書に変換
例として、dev_push.p12 を dev_push.pem に変換するのは下のコマンドです
証明書と秘密鍵の両方を取り出しますので「-nodes -clcerts」とします
それぞれ別々に作成する方法もあります
同様に配布用の場合は dist_push.pem のように pem ファイルを作ります
 

 
apns3_6
 
パスワードは入れずにそのまま Enter でいけます
 
出来上がった pem ファイルとエディタでのぞくと
 

 
という具合に Certificate と RSA Private Key がそれぞれ作成されています
 

サーバーの証明書

 
サーバーの証明書を作成しますが、今回は
Entrust を利用します
https://www.entrust.net/downloads/root_request.cfm
 
Development と Production ではそれぞれ異なります
Development:
https://www.entrust.net/downloads/binary/entrust_2048_ca.cer
Production:
https://www.entrust.net/downloads/binary/entrust_ssl_ca.cer
 
これらをダウンロードして、ダブルクリックでキーチェーンアクセスに登録します
 
apns3_7
 
登録された Entrust.net Certification Authority (2048) を右クリックして
 
apns3_8
 
名前を適当に決めて、pem 形式で書き出します
 
apns3_9
 

サーバーを設定

 
プロバイダーとして、APNs とやりとりするサーバーをセットアップします
オープンソースで apns-php というのがありますので、これを今回は使います
 
apns3_10
https://code.google.com/p/apns-php/downloads/list
ApnsPHP-r100.zip をダウンロードします
 
解凍した中にある sample_push.php を使います
 
apns3_11

 
sample_push.php を開いて編集します
 
開発用:ENVIROMENT_SANDBOX, ‘dev_push.pem’
配布用:ENVIROMENT_PRODUCTION, ‘dist_dev.pem’ に変更します
 

 
entrustnet の証明書を記述します
 

 
取得したデバイストークンを入れます
 

 
これで準備が整ったので、関連ファイルをサーバーに上げます
 
push-notification_99
 

通知の受信

 
アプリ側で、リモート通知を受信できるようにします
 
AppDelegate.m に以下の内容を記述します
 

 
didReceiveRemoteNotification を使い通知内容をアラートに表示します
 
アプリを起動して、
ブラウザでサーバーの sample_push.php をたたくと
ブラウザにログが出てきます
 
apns3_14
 
アプリに通知が来ます
 
apns3_15
 
という訳で、めでたくプッシュ通知を受信できました
ただこれはアプリが起動中に通知を受けた場合で、
アプリが起動していない場合等のケース分けが必要になります
 

  1. Client App から端末に APNs にSSL接続させ deviceToken を取得
  2. Client App が Provider に deviceToken を送出
  3. Provider がその deviceToken を使って特定端末に通知を送る
  4. Client App リモート通知受信のケース分け