PHPからApple iOSへ通知を送る際に使うpemファイルをp12から作成する際にopensslコマンドで行っていましたが、突如、以下のようなエラーが出ていたことに気づきました。
004C5FFE01000000:error:0308010C:digital envelope routines:inner_evp_generic_fetch:unsupported:crypto/evp/evp_fetch.c:355:Global default library context, Algorithm (RC2-40-CBC : 0), Properties ()
このエラーが出ていても、.pemファイルは作成され、通知もPHP上ではエラーを出さず何事もなかったかのように実行されているのですが、これが原因で、実は通知が送られてこない ということがわかりました。エラーが発生しないため、このopenssl時のこのエラーが原因だというところまで突き詰めるのにえらく時間がかかりました。
openssl pkcs12 -in 証明書.p12 -out server_certificates.pem -nodes -clcerts -legacy
この最後につけてる -legacy
というパラメータをつけることで、上記のエラーが出なくなり、ちゃんと通知が送られるpemを生成することができるようになりました。
その他通知関連をついでにいろいろと
このほかに、似たように正しく設定してるのに通知が送られないという現象の原因として、Xcodeから直接実機にインストールしたアプリに、PHPからProduction用の証明書で作成したpemファイルを使って送信しても通知が届きません。TestFlightからインストールするとProduction用でも届きます。(ちなみにAndroidはUnityから直接インストールしたアプリでも通知は届きます)この辺も罠です。
あと、ついでにここでも書いておくと、上記、opensslで生成したpemファイルは、後からファイル名を変更すると使えなくなったりします。
あと、PHPからApple iOSに通知を出すためには、curlでhttp/2が使える環境でないとダメになったので、レンタルサーバーの共有サーバーでは使えないことが多く(2024年現在)、このMEMOで、Linuxを立ち上げるところから環境を準備しています。
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、Unity, Unity Netcode for GameObjects, CakePHP, Laravel, ZBrush, Modo, Adobe Substance 3D, Adobe Firefly, Xcode, Apple Vision Pro, Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。