iOS Pu sh уведомление работает при запуске с сервера, но не работает с реального устройства - PullRequest
1 голос
/ 27 марта 2020

Я разрабатываю удаленное уведомление pu sh для iOS, используя php. Когда я запускаю свой код с сервера с помощью команды php push_notification.php (push_notification.php - это имя моего API), он успешно отправляет уведомление. Но когда я пытаюсь запустить API от почтового менеджера или реального устройства, он не отправляет никаких уведомлений и выдает ошибку «1003». Вот мой код.

<?php

   /* sample device token*/
    $id = '9A057567E5208D4471294A0FDFFF777EEE92E2205EBA9334C5ADE5A383F7B344';

    $apnsServer = 'ssl://gateway.push.apple.com:2195';

    /* Make sure this is set to the password that you set for your private key
    when you exported it to the .pem file using openssl on your OS X */

    $privateKeyPassword = 'password';
    $message = 'Welcome to iOS 10 Push Notifications';
    /* Pur your device token here */
    $deviceToken = $id;
    /* Replace this with the name of the file that you have placed by your PHP
    script file, containing your private key and certificate that you generated
    earlier */
    $pushCertAndKeyPemFile = dirname(__FILE__).'/PushCertificateAndKey.cer';
    $stream = stream_context_create();
    stream_context_set_option($stream,
    'ssl',
    'passphrase',
    $privateKeyPassword);
    stream_context_set_option($stream,
    'ssl',
    'local_cert',
    $pushCertAndKeyPemFile);
    stream_context_set_option( $stream , 'ssl', 'verify_peer', false);

    $connectionTimeout = 60;
    $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: ".$message."to device token: ".$id.PHP_EOL;
    }
    fclose($connection);
?>

Я знаю, что есть много вопросов, связанных с уведомлением pu sh. Но я думаю, что мой способ отличается тем, что я могу отправлять уведомления с моего сервера, но не с моего устройства или почтальона. Что не так с этим и почему он работает, когда я запускаю его со своего сервера и не работает на реальном устройстве?

1 Ответ

1 голос
/ 27 марта 2020

Вам нужно проверить несколько вещей, чтобы правильно проверить поток Push Notifications.

  • Используете ли вы на сервере сертификат Development или Production для отправки Push Notifications?
  • Устанавливаете ли вы приложение непосредственно из Xcode или используете Development (Debug) или Production (Release) сборка?
  • Также убедитесь, что на компьютере разработчика установлен сертификат APNS, установленный в формате .p12.

Обратите внимание, что приложение, установленное из сборки разработки, может получать только уведомления от сервера с сертификатом разработки.
В то время как производственное приложение может получать уведомления только от сервера с производственным сертификатом.

Надеюсь, это поможет

...