Я использую PHP, чтобы попытаться отправить push-уведомление моему приложению iOS. Мой push-код выглядит так:
<?php
$title = "Notification";
$message=array();
$message['text'] = "Message";
$message['id']=1;
$to='695D55573361DB9948D09AB43EA1548A9AAECB4D23F7D836BD7F88FA94ABBE5E';
echo $to.PHP_EOL;
sendPushAPN($to,$title,$message);
function sendPushAPN($to,$title,$message)
{
$to=str_replace(" ","",$to);
// Put your device token here (without spaces):
$deviceToken=$to;
// Put your private key's passphrase here:
$passphrase = 'abc';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'aps.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client('ssl://gateway.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
// codi existent //$body['aps'] = array('alert' => "ole.. alex",'sound'=> 'default','push_type' => 'alert');
$body['aps']=array('alert' => array('title' => 'Notificacion','body' => 'Ok Alex'),'sound' => 'default');
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// $msg = pack("C", 1) . pack("N","alert") . pack("N",$deviceToken) . pack("N", $apple_expiry) . pack("n", 32) . pack('H*', str_replace(' ', '', $deviceToken'])) . pack("n", strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
// Close the connection to the server
fclose($fp);
echo 'Result:' . $result . PHP_EOL;
}
?>
Но мой вывод всегда выглядит одинаково:
Подключено к АПНС Результат:114
и push-уведомление никогда не приходит. Что означает код 114? Есть ли способ получить больше информации о том, что происходит? Или, может быть, я просто использую неправильный способ отправки push-уведомлений?






Ваш код использует устаревший двоичный API для APNS.
Вам необходимо использовать HTTP/2 API.
Быстрый поиск в Интернете показывает, что существует несколько различных библиотек PHP, которые могут предоставить это, а также пример кода.
Ты прав. Я был сбит с толку, так как мой код выше работал в старом приложении, но не в новом. На всякий случай, если кому-то это понадобится, этот туториал очень помог!
Функция
fwriteвозвращает количество записанных байтов, которое в данном случае равно 114.