Amazon ec2 не может отправлять push-уведомления на ios

Я использую ниже php-код в Amazon ec2, php 7

<?php function sendApplePushNotificationMessage( $data, $message ) { global $notification; $apns_settings = $notification['apns_user']; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $apns_settings['pemFile']); $fp = stream_socket_client('ssl://gateway.'.(($apns_settings['environment'] == $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) exit("Failed to connect amarnew: $err $errstr" . PHP_EOL); echo 'Connected to APNS' . PHP_EOL; $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); $payload = json_encode($body+$extra_values); $msg = chr(0) . pack('n', 32) . pack('H*', $data['token']) . pack('n', strlen($payload)) . $payload; $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered '.$message. PHP_EOL; // Close the connection to the server fclose($fp); } 

когда я вызываю эту функцию, я получил сообщение об успешном завершении.

 Connected to APNS Message successfully delivered 

Когда я пытаюсь использовать тот же файл pem и токен устройства для тестирования в Интернете, он работает правильно, но не работает на Amazon ec2 .

Вы используете службу APN для отправки push-уведомлений. Он будет обращаться к портам 2195 и 2196 для отправки push-уведомлений с помощью TCPSocket .

Ваша локальная система будет иметь доступ ко всем портам, и тогда проблем не будет.

Экземпляр EC2 по умолчанию не имеет доступа к этим портам. Вы можете разрешить / открыть эти порты в своих security groups экземпляров ec2 .

Также разрешите порт 443 .

Альтернативой написанию собственной функции, вызывающей уведомление Apple Push, будет использование Amazon Simple Notification Service (SNS).

Amazon SNS может вызывать уведомления для iOS, Android, Baidu, Windows Mobile, рабочего стола Windows и рабочего стола Mac.

См .: Начало работы с Apple Push Notification Service