Intereting Posts
Хорошие источники обучения для ООП-PHP, кто-нибудь? php require_once не работает так, как я хочу. Относительный путь CakePHP с использованием нескольких баз данных для моделей Почему PHP в Windows не видит расширение php_intl.dll, даже если оно существует? PHP словарь класс? или альтернатива? Как подготовленные заявления PHP PDO предотвращают инъекцию sql? Каковы другие преимущества использования PDO? Использует ли PDO эффективность? Запрос MySQL для получения имен столбцов? php конвертировать datetime в UTC Получить видео с прямой ссылкой из Vimeo в PHP Шифрование: использование вектора инициализации против ключа? Предотвращение фиксации сеанса путем обеспечения единственного источника создания сеанса должно быть безопасным случайным генератором Отправлять и получать SMS-сообщения в PHP-скрипт? php ini изменить локальное значение конвертировать xml в html с помощью php быстрый способ динамического извлечения размеров изображения

Как отправлять уведомления iOS Push с помощью TLS и PHP?

Мое приложение все еще находится в разработке, и я использовал этот учебник для отправки уведомлений iOS Push с помощью PHP и SSL.

http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1

Он работал, но недавно он обесценился, потому что Apple недавно решила отказаться от SSL, немедленно затрагивая все приложения в разработке, а приложения в производстве – до 29 октября, чтобы изменить свой код.

Я хотел бы знать, как сделать то же самое, используя TLS вместо SSL.

Вот что мой PHP, который работал, выглядит так:

$ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

Я попытался добавить сертификат Entrust, поскольку Apple предлагает:

 $ctx = stream_context_create(); stream_context_set_option($ctx, 'tls', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'tls', 'passphrase', $passphrase); stream_context_set_option($ctx, 'tls', 'cafile', 'entrust_2048_ca.cer'); $fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

Но это все еще не работает. Есть ли у вас предложение исправить это?

 $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer'); $fp = stream_socket_client('tls://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

если вы работаете в локальной среде, не забудьте загрузить файл сертификации entrust_2048_ca.cer

 <?php $message = 'aa_' . rand(10000,99999); $deviceToken = array( 'xxxxxx' ); $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'passphrase', '111111'); stream_context_set_option($ctx, "ssl", "local_cert", './apns.pem'); $fp = NULL; $errno = NULL; $errstr = NULL; $fp = stream_socket_client("tls://gateway.sandbox.push.apple.com:2195", $errno, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if($fp === FALSE){ exit('error message'); } $content = array("aps" => array("alert" => $message, "badge" => 4, "sound" => 'default', "code" => 200)); $data = json_encode($content); foreach ($deviceToken as $token) { $msg = chr(0) . pack("n", 32) . pack("H*", $token) . pack("n", strlen($data)) . $data; fwrite($fp, $msg); fflush($fp); } fclose($fp); 

Вот несколько советов, которые должны помочь вам разобраться:

  1. Перейдите по адресу entrust.net/downloads/root_request.cfm и загрузите файл entrust_2048_ca.cer

  2. Добавьте следующий код: stream_context_set_option ($ ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');

  3. Убедитесь, что правильный путь: '../folder/file/ck.pem'?

  4. Переключитесь и попробуйте как песочницу, так и живые ссылки ssl.

  5. Переключатель dev и производственный пем и попробуйте оба.