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

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

Swift 3.0.2
Xcode 8.2.1

 

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

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

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

Ref:プロバイダーからアプリケーションにリモート通知を配送する様子

 

キーチェーンアクセスの「証明書」から、今回の証明書を選んで右クリックします。
尚、以降はテストのため開発用のdevelopmentを使っていきますが最終的にはDistribution用として全て合わせていくことになります。

“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
 
出来上がった pem ファイルとエディタでのぞくと
 

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

サーバーの証明書

 
サーバーの証明書を作成しますが、今回は
Entrust を利用します
Development と Production は以前は分かれていたようですが1つでできるようです。
https://www.entrust.com/root-certificates/entrust_2048_ca.cer
 
うまくいかない場合は他の証明書を探してください。こちらのフリーの証明書のリンクも度々変わっているようで、有料で使って欲しいようです。

 
ダウンロードした証明書をダブルクリックでキーチェーンアクセスに登録します
 
apns3_7
 
登録された Entrust.net Certification Authority (2048) を右クリックして
 
apns3_8
 
名前を適当に決めて、pem 形式で書き出します
 
apns3_9
 

APNS-PHP サーバーを設定

 
プロバイダーとして、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
 

通知の受信

 
試しにアプリ側で、リモート通知を受信できるようにします。backgroundではこのまま受信できます。
 
アプリを終了させて、サーバーから ../sample_push.php
を起動するとメッセージが表示されます。
 
アプリ側に通知が届きます。
 

 
めでたくプッシュ通知を受信できましたが、次のステップは
アプリがbackground, foregroundなどのケース分けです
 

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

ページのトップへ戻る

シェアする

  • このエントリーをはてなブックマークに追加

フォローする