CRONでPHPを定期的に自動処理させ、Apple Push を使って各iOSデバイスに通知を配信する仕組みを施し、ある程度の期間サービスを運用し、数年経った頃に
Error: Unable to connect to ‘ssl://gateway.push.apple.com:2195’: (0)#0
というエラーが出て配信できなくなっていた時の原因と対処についてのMEMOです。
証明書の期限切れが原因
ルート証明書は、自前証明書で期限をできる限り長く設定していたりして、期限は切れていなかったものの、サーバー用証明書の方は、一定の期間経つと期限が切れて再作成する必要があったりするかもしれません。
ここの情報が非常に有益で参考にさせていただきました。が、一点、細かい点でミスって対処に無駄に時間がかかってしまっていたのでMEMOしておきます。
証明書.p12を書き出す時に注意
上記サイトにおいて「aps_development.cer から server_certificates_sandbox.pem を作成」という段階で、「サーバ用証明書」というpemファイルを作成する流れがあります。
openssl pkcs12 -in 証明書.p12 -out server_certificates_sandbox.pem -nodes -clcerts
のようにopenssl
で.pemファイルを作成し、これをサーバーにアップロードし、phpで指定して利用することで通知機能が働くようになるわけですが、この証明書.p12を作成するときに、MacOSのキーチェーンを使って書き出します。このとき、
のように証明書部分を2項目選択して書き出した場合にエラーが出なくなり、うまくいきました。下の図のように
鍵アイコンの部分のみを選択して書き出した場合は、うまくいきませんでした。細かな違いですが、ここに違いがあると思わなかったので対処に時間がかかりました。一応MEMOとして残しておきました。
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、CakePHP、Laravel、Unity、ZBrush、Modo、Adobe Substance 3D、Adobe Firefly、Xcode、Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。