cordova + ionicでプッシュ通知(iOS)の1から9!でiOSのプッシュ通知はもう大丈夫って思っていたんですけど、ちょっと考えが甘かったです。
というのは、サーバーから実際にプッシュ通知を投げるときのことをあまり考えていなかったから。以前は簡単なSimplePushというサンプルアプリを使ってプッシュ通知のテストをしたのですが、本番環境でそのサンプルを使うわけにもいかず、ライブラリを探すことになりました。
ApnsPHP
というライブラリが選定されましたが、 SimplePush
と同じような感覚で、「とりあえず証明書とか鍵設定すればもう送信できるっしょ」ってな気持ちで挑んだら思わぬ罠(実際は罠ではない)にはまりました。
ハマった箇所は公式にもあるこの場所↓
1 2 3 4 5 6 7 |
$push = new ApnsPHP_Push( ApnsPHP_Abstract::ENVIRONMENT_SANDBOX, 'server_certificates_bundle_sandbox.pem' ); $push->setRootCertificationAuthority('entrust_root_certification_authority.pem'); |
server_certificates_bundle_sandbox.pem
と entrust_root_certification_authority.pem
が超重要なんですけど、訳もわからず前回の記事で作った2つの pem
ファイルを設定すると、ひたすら 'Unable to connect to 'tls://gateway.sandbox.push.apple.com:2195'
が出て Exception
になり続けます。 pem
も設定してるし、サーバーから SimplePush
を使った場合は普通にプッシュ通知できるし、で謎が深まるばかり。
結局、Githubのページ「How to generate a Push Notification certificate and download the Entrust Root Authority certificate」にしっかりと手順が書かれていました。重要なのは
select Apple Development Push Services AND your private key
キーチェーンから鍵を書き出すときに、証明書と鍵の 両方 を選択して書き出すって書いてあるんです!なので、 SimplePush
のときに使った証明書の出し方とは異なります。
おまけに、2つ目に指定する証明書は別途ダウンロードしてくるものでした!
wget https://www.entrust.com/root-certificates/entrust_2048_ca.cer -O - > entrust_root_certification_authority.pem
「そりゃ、動かないわな」って感じですね。ドキュメントはしっかり読みましょう〜。
無事にサーバーからプッシュ通知が投げれるようになった、って話です。