Как и что отправить в APN с сервера, чтобы APN отправлял уведомление на устройство?

Я разработчик для iOS, и меня спросили, к какому типу (весь заголовок i.e и тело) запроса нажать APN, чтобы получить уведомление на устройство.

Я прочитал много учебника по настройке сервера для APN, но я не могу понять, так как я ничего не знаю о PhP и Node Js. Прочитав документ Apple, я узнал, что он использует http / 2 и другие различные теги и значения. Но я не могу построить полный запрос.
Любая помощь высоко ценится.

0

Решение

Для отправки запроса APN с использованием PHP вам необходимы следующие требования:

  1. .pem сертификат, который должен существовать в том же пути вашего php-скрипта.
  2. Маркер устройства, который необходим для отправки уведомления на определенное устройство.

Тогда вы можете попробовать следующий код:

<?php
$apnsServer = 'ssl://gateway.push.apple.com:2195';
$privateKeyPassword = '1234'; // your .pem private key password

$message = 'Hello world!';

$deviceToken = 'YOUR_DEVICE_TOKEN_HERE';

$pushCertAndKeyPemFile = 'PushCertificateAndKey.pem'; // Your .pem certificate
$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...";
}
$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.";
}
else {
echo "Successfully sent the message.";
}
fclose($connection);

?>

Обратитесь к этому ссылка на сайт Больше подробностей.

0

Другие решения

Мы просто используем простой CURL для выполнения запросов http2 к APNS

Предварительные условия: у вас есть действительный сертификат SSL, преобразованный в .PEM из консоли разработчика

/usr/local/Cellar/curl/7.50.0/bin/curl -v \
-d '{"aps":{"alert":"Hello","content-available": 1, "sound": ""}}' \
-H "apns-topic: com.yourapp.bundleid" \
-H "apns-expiration: 1" \
-H "apns-priority: 10" \
--http2 \
--cert /Users/PATHTOPEM/key.pem:YOURPASSWORD \
https://api.push.apple.com/3/device/YOURDEVICETOKEN

Или, если вы опасаетесь использовать терминал, попробуйте это приложение MacOS для отправки push-уведомлений, это очень просто.

Предварительные условия: у вас должны быть полномочия подписи сертификата и частный сертификат SSL в вашей цепочке для ключей.

https://github.com/noodlewerk/NWPusher

0