2011-09-17 10 views
20

Zaimplementowałem przykładową usługę powiadomień push dla mojej aplikacji.Powiadomienia push systemu iOS nie działają podczas korzystania z programu planującego crontab.

W tej chwili testuję w środowisku piaskownicy.

Otrzymuję powiadomienia, gdy ręcznie wywołuję skrypt PHP, aby przekazywać powiadomienia przez APN.

Kiedy piszę terminarz przy użyciu crontab, aby zautomatyzować dostarczanie powiadomień, nie otrzymuję powiadomień. Błąd, który otrzymuję jako wiadomość e-mail, to:

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 

Czy ktoś może wyjaśnić, na czym polega problem?

Odpowiedz

47

Ten problem został rozwiązany. Prawdziwym problemem był skrypt PHP, którego używałem.

Wcześniej w stream_context_set_option Nie zawierałem pełnej ścieżki do pliku ck.pem. Po podaniu pełnej ścieżki nie wystąpił błąd. Poniżej znajduje się kod, którego teraz używam.

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

inni, którzy mieli ten problem i ich dyskusje

Apple Forum Question 1

Apple Forum Question 2

+2

Uratowałeś mój dzień jak każdy inny mówił to ma coś wspólnego z wersją openssl, dzięki – DeZigny

+0

serdecznie zapraszamy – Krishnan

+1

To pytanie stało się bardziej aktualne dopiero po przejściu na wersję tls1.0. Robię komentarz, aby inni, którzy wyszukiwali go w wyszukiwarce tls1.0, mogli znaleźć to rozwiązanie. – thedeveloper3124

0

wypróbować ten kod

$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);