Постоянное подключение через PHP к APNS


Я знаю, что на сайте есть много постов, посвященных этой проблеме, к сожалению, я не настолько продвинут в программировании на PHP, и у меня есть вопрос, на который еще никто не ответил:

Многие учебные пособия по Push-уведомлениям Apple создают соединение через stream_socket_client(). Но в большинстве из них отсутствует флаг "STREAM_CLIENT_PERSISTENT". Сделает ли этот флаг соединение действительно постоянным? Если да, то когда он будет закрыт? В документации сказано, что он останется подключенный также на странице перезагружается. Зависит ли это от сеансов?

Версия без этого флага работает, но я боюсь, что APNS заблокирует меня, как только я введу производственные сертификаты и т. Д. (описано здесь ). Заранее спасибо.

Author: Community, 2012-06-08

1 answers

Согласно документации PHP по Предопределенным константам , использование STREAM_CLIENT_PERSISTENT с подключением APNS должно поддерживать соединение активным между загрузками страниц. Это требование для подключения APNS, так как оно задушит вас, поскольку считает любое отключение после отправки полезной нагрузки потенциальной атакой типа "Отказ в обслуживании".

Если у вас возникнут какие-либо проблемы с клиентом за пределами существующих подключений, вы можете захотеть попробуйте следующее, так как это лучший способ, который я видел до сих пор для обработки соединения APNS в PHP. Для этого используется клиент из PHPXMLRPC, поэтому вам придется загрузить этот пакет.

<?php

include '../vendors/xmlrpc.inc';

$hostName = 'localhost'; # Your services endpoint here.
$rpcPath = '';
$port = 7077;

if($_GET['action'] == 'provisioning')
{
    $echoString = new xmlrpcmsg(
        'provision',
        array(
            php_xmlrpc_encode('appid'),
            php_xmlrpc_encode('/path/to/certificate.pem'),
            php_xmlrpc_encode('sandbox'),
            php_xmlrpc_encode(100)
        )
    );
    $continue = TRUE;
}

if($_GET['action'] == 'notify')
{
    $echoString = new xmlrpcmsg(
        'notify',
        array(
            php_xmlrpc_encode('paparazzme'),
            php_xmlrpc_encode(array('6bcda...', '7c008...')),
            php_xmlrpc_encode(array(array("aps" => array("alert" => "Hello User 1" )), array("aps" => array("alert" => "Hello User 2" ))))
        )
    );
    $continue = TRUE;
}

if($continue == true)
{
    # Create a client handle and send request
    $client = new xmlrpc_client($rpcPath, $hostName, $port);

    # A little verbose debug
    $client->setDebug(2);

    # The response
    $response = &$client->send($echoString);

    # Check if response is good
    if (! $response->faultCode())
        print "\nReturned string is: " . php_xmlrpc_decode($response->value()) . "\n";
    else
        print "An error occurred: \nCode: " . $response->faultCode() . " Reason: '" . htmlspecialchars($response->faultString()) . "'\n";
}

?>

ИСТОЧНИК: Как начать работу с APNS для iPhone или iTouch

Я хотел бы потратить время, чтобы отметить, что я не тестировал ни один из этих кодов, у меня сейчас нет приложения для iPhone, чтобы проверить это, поэтому я могу сказать вам, действительно ли это работает.

Если это возможно для вас, я бы рекомендовал вам вместо этого использовать Uban Airship, так как они предоставляют 250 000 бесплатных нажатий в месяц каждому из своих клиентов и обрабатывают подключение к серверу APN для вас, оттуда вы используете их API для общения со своими клиентами.

 6
Author: Mark Tomlin, 2012-08-01 13:28:41