Guzzle(PHP)でAPNsの同時配信を行う
Oct 29, 2016 · serverphpapnshttp2
Guzzle
でiOSのAPNs(Push通知)をお手軽に同時配信する方法
APNs自体についてはAPNs Provider API(http2)を利用する(Node.js)を参照
事前準備
Guzzle
自体は以前の記事を参照
curlの更新
APNsを使うにはhttp2
が必要かつ非同期で実行したいので、curl
をインストールし直す
homebrew
を使っている場合は以下の感じ
brew install curl --with-nghttp2 --with-openssl
brew link curl --force
brew reinstall php56 --with-homebrew-curl
なお、自分で試した時は上記だけではhttp2
が有効にならなかったので、
アンイストールした方が確実かもしれない
更新後に
curl -V
としてhttp2
が出ていればOK
Guzzleの使い方
http2で通信する
オプションで指定するだけでOK
$client = new Client(['version' => 2.0]);
POST送信
body
はリクエスト時のオプションとして以下の感じで指定する
$client = new Client();
$response = $client->request('POST', $url, ['body' => $body]);
body
の中身をJSON
にしたい時は、
['body' => json_encode($json])]
という形にして渡す
クライアント証明書をつける
これもオプションで指定するだけでOK
例えば同じ階層内にapns_dev.pem
という証明書(パスフレーズ0000
)に置いた場合は、
$client = new Client(['cert' => ['apns_dev.pem', '0000']]);
あえていうなら、pem
形式の証明書を作るのがちょっと面倒
APNsの同時配信
APNsは通知内容をJSONで指定することと、前回の並列リクエストを併せると、以下のコードで同時配信が実現できる
(※配信環境はSandBox向け)
開発環境
- PHP 5.6
- Guzzle 6.2.2