Push-уведомления работают в браузере, а не в командной строке - PullRequest
0 голосов
/ 08 октября 2018

У меня есть php файл для запуска apns.И это работает, когда я вызываю веб-страницу в браузере.Однако это не работает на терминале с вызовом

php deneme.php

Я подтверждаю, что файл .pem создан правильно.А также определить его местоположение в php-файле тоже правильно (т.к. корректно работает в браузере).Я выбежал с опцией.Я надеюсь, что вы даете мне идею.

Файл deneme.php:

<?php
    $apnsServer = 'ssl://gateway.sandbox.push.apple.com:2195';

    $privateKeyPassword = 'MyPassword123';
    $message = 'Test Push Notifications';

    $deviceToken =
    '2877b691ffd9a3edfa45ee31ff25083f1845e016e7902d130eb09713b1c2ed2f';

    $pushCertAndKeyPemFile =  $_SERVER['DOCUMENT_ROOT'].'/ck.pem';// 'ck.pem';
    $stream = stream_context_create();
    stream_context_set_option($stream,
        'ssl',
        'passphrase',
        $privateKeyPassword);
        stream_context_set_option($stream,
        'ssl',
        'local_cert',
        $pushCertAndKeyPemFile);

    $connectionTimeout = 20;
    $connectionType = STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT;
    $connection = stream_socket_client($apnsServer,
    $errorNumber,
    $errorString,
    $connectionTimeout,
    $connectionType,
    $stream);
    if (!$connection){
        echo "Failed to connect to the APNS server. Error no = $errorNumber<br/>";
        exit;
    } else {
        echo "Successfully connected to the APNS. Processing...</br>";
    }
    $messageBody['aps'] = array('alert' => $message,
        'sound' => 'default',
        'badge' => 2,
        );
    $payload = json_encode($messageBody);
    $notification = chr(0) .
    pack('n', 32) .
    pack('H*', $deviceToken) .
    pack('n', strlen($payload)) .
    $payload;
    $wroteSuccessfully = fwrite($connection, $notification, strlen($notification));
    if (!$wroteSuccessfully){
        echo "Could not send the message<br/>";
    }
    else {
        echo "Successfully sent the message<br/>";
    }
    fclose($connection);
?>

1 Ответ

0 голосов
/ 08 октября 2018

Нет суперглобальных $_SERVER[], доступных при запуске из CLI, так как не работает ни один сервер.Замените $_SERVER['DOCUMENT_ROOT'].'/ck.pem'; абсолютным путем к файлу ck.pem.

...