APNS с Google App Engine и PHP SSL ошибка

1

Я пытаюсь отправить уведомления iOS push из брандмауэра PHP App Engine, но я получаю следующие ошибки. Я не уверен, есть ли проблема с сертификатом, как я это делаю, или что-то особенное для App Engine. Это первый раз, когда вы отправляете push-уведомления в iOS.

Вот мой код:

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');

$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
{
  //Handle Error
}

$body['aps'] = array(
  'alert' => $data["message"],
  'sound' => 'default',
);
$body["postID"] = $data["postID"];
$body["groupID"] = $data["groupID"];
$body["type"] = $data["type"];

$payload = json_encode($body);

foreach ($registrationIds as $registrationID)
{
  $deviceToken = $registrationID;
  $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
  $result = fwrite($fp, $msg, strlen($msg));
}

fclose($fp);

Вот ошибка, которую я получаю:

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 fakefile.php

Я не знаю, в чем причина. Заранее спасибо

ОБНОВЛЕНИЕ: Это уже не ошибка, которую я получаю. Теперь я получаю следующее:

PHP Warning:  stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error)
  • 0
    Каково было разрешение папки APNS и является ли оно вложенным?
  • 0
    У меня нет контроля над разрешениями папок в обработчике приложений, но, насколько мне известно, люди успешно внедрили push-уведомления в обработчике приложений, поэтому я предполагаю, что разрешения правильные.
Показать ещё 2 комментария
Теги:
ssl
google-app-engine
apple-push-notifications

2 ответа

0

В stream_context_set_option вы не указали полный путь к файлу ck.pem. После полного пути не было ошибки.

Ниже приведен код, который поможет решить вашу проблему.

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

Следующий код для проверки порта включен для Push-уведомления.

<?php

chkServer('gateway.sandbox.push.apple.com', 2195);
//chkServer('gateway.push.apple.com',2195); 

function chkServer($host, $port)
{
    $hostip = @gethostbyname($host);

    if ($hostip == $host) {
        echo "Server is down or does not exist";
    } else {
        if (!$x = @fsockopen($hostip, $port, $errno, $errstr, 5)) {
            echo "Port $port is closed.";
        } else {
            echo "Port $port is open.";
            if ($x) {
                @fclose($x);
            }
        }
    }
}
?>

Счастливое кодирование.

  • 0
    Прежде всего, проверьте порт включен или нет @TheSabby
  • 0
    Я проверил и порт открыт. Я также добавил полный путь, но все еще ничего. Спасибо @Nimit Parekh
Показать ещё 3 комментария
0

Возможно, ваш порт 2195 и 2196 закрыты со стороны сервера, которые блокируют push-уведомления.

  • 0
    Они не закрыты
  • 0
    stackoverflow.com/questions/7453015/...
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню