iOS не работает с Zend Framework - PullRequest
0 голосов
/ 10 мая 2019

Я реализовал функцию push-уведомлений в моем приложении iOS. Push-уведомление будет отправлено со стороны сервера.

Я использую Zend Framework на бэкэнд-стороне.

Теперь, если я делаю онлайн-тесты с push-уведомлением, это работает. Так что он уверен, что файл .pem создан правильно, а на iOS он правильно получил push-сообщения.

Но при отправке push-сообщения из бэкэнда из Zend Framework он не работает. Это показывает сообщение об ошибке, как это:

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 /home/virtual/site71/fst/var/www/html/application/configs/functions.php on line 316

Warning: stream_socket_client(): Failed to enable crypto in /home/virtual/site71/fst/var/www/html/application/configs/functions.php on line 316

Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /home/virtual/site71/fst/var/www/html/application/configs/functions.php on line 316

Вот реализация:

function sendIOS($deviceToken){
    $passphrase = '12345678';
    // Put your alert message here:
    $message = 'New stock has been added by Dividend Stock!';

    $ctx = stream_context_create();
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert_new.pem');
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    if (!$fp)
      exit("Failed to connect: $err $errstr" . PHP_EOL);
    echo 'Connected to APNS' . PHP_EOL;
    // Create the payload body
    $body['aps'] = array(
      'alert' => array(
            'body' => $message,
        'action-loc-key' => 'dinero App',
        ),
        'badge' => 1  
      );
    // Encode the payload as JSON
    $payload = json_encode($body);
    // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));

    if (!$result)
      echo 'Message not delivered' . PHP_EOL;
    else
      echo 'Message successfully delivered' . PHP_EOL;

    fclose($fp);
}

Любые указания или подсказки будут высоко оценены.

...