5

このコード: ( https://github.com/stuffmc/Safari-Push-Notifications/blob/master/index.php#L195 )

stream_socket_client('ssl://gateway.push.apple.com:2195', $error, $errorString, 
                      60, STREAM_CLIENT_CONNECT, $streamContext);

を返しますfalseが、エラーはありません。/v1/push に送信すると、すべてのデバイス/トークンで失敗することを意味します:( PHPドキュメントには次のように書かれています:

errno に返された値が 0 で、関数が FALSE を返した場合は、connect() 呼び出しの前にエラーが発生したことを示しています。これは、ソケットの初期化の問題が原因である可能性が最も高いです。

このコードは Web サイト (開発/ベータ/ステージング) で完全に実行されていますが、本番環境に移行しようとしているのですが、移行しません。

ただし、その呼び出しに注意する必要があります

$ openssl s_client -connect gateway.push.apple.com:2195 -cert MyC.pem -key myK.pem

完全に動作します。文字を入力できるプロンプトが表示され、Enter を入力すると終了します — 私の開発テストと同じです。

/v1/logまた、 (https://devforums.apple.com/thread/203825で言及されているように)何も送信されていないため、問題がどこにあるのかわかりません:(

4

1 に答える 1

4

この方法で .pem を生成することで問題を解決しました。

openssl pkcs12 -in key-chain-export.p12 -out apple_push_cert_production.pem -nodes -clcerts

それが証明書であるという「ヒント」(PHPまたはopensslから)をどのように得ることができたのか、まだ知りたいです。

AND : サーバー側の問題は解決しましたが、クライアント側で問題が発生しました。しかたがない.....

また、サーバー上のコードを修正して/v1/log、Apple から何かを取得できるようにしたことにも言及する必要があります。

https://github.com/surrealroad/Safari-Push-Notifications/commit/0ae8a3ad3327a957c332090ea1bfcb146a40c5f3を参照してください。

于 2014-07-25T13:19:47.420 に答える