Я разрабатываю удаленное уведомление 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. Но я думаю, что мой способ отличается тем, что я могу отправлять уведомления с моего сервера, но не с моего устройства или почтальона. Что не так с этим и почему он работает, когда я запускаю его со своего сервера и не работает на реальном устройстве?