web-dev-qa-db-ja.com

crontabスケジューラを使用している場合、iOSプッシュ通知が機能しません

アプリにサンプルのプッシュ通知サービスを実装しました。

現在、サンドボックス環境でテストしています。

PHPスクリプトを手動で呼び出してAPNを介して通知をプッシュすると、通知が届きます。

crontabを使用してスケジューラーを作成し、通知の配信を自動化すると、通知が届きません。私がメールとして受け取るエラーは次のとおりです。

PHP Warning:  stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure in /Users/aspire/Desktop/SimplePush/simplepush.php on line 21
PHP Warning:  stream_socket_client(): Failed to enable crypto in /Users/aspire/Desktop/SimplePush/simplepush.php on line 21
PHP Warning:  stream_socket_client(): unable to connect to ssl://gateway.sandbox.Push.Apple.com:2195 (Unknown error) in /Users/aspire/Desktop/SimplePush/simplepush.php on line 21
Failed to connect: 0 

誰かが問題が何であるかを説明できますか?

20
Krishnan

この問題は修正されました。本当の問題は、私が使用したPHPスクリプトにありました。

Stream_context_set_optionの前半で、ck.pemファイルへのフルパスを含めませんでした。フルパスを指定した後、エラーはありませんでした。以下は私が今使っているコードです。

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', '/Users/Development/Dev/ck.pem');

この問題を抱えている他の何人かと彼らの議論は

Appleフォーラムの質問1

Appleフォーラムの質問2

49
Krishnan

このコードを試してください

    $apnsCert = $_SERVER['DOCUMENT_ROOT'].'/..../..../ck.pem';
    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert',$apnsCert);
    stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');
$fp = stream_socket_client('ssl://gateway.sandbox.Push.Apple.com:2195',$err,$errstr,60,STREAM_CLIENT_CONNECT,$ctx);
1
AnilPatel