2012-06-08 5 views
5

Ich weiß, dass es viele Beiträge auf, so dass dieses Problem zu lösen, leider bin ich nicht, dass fortgeschritten in PHP-Programmierung und ich habe eine Frage, die woanders nicht beantwortet wird:Persistent Verbindung über PHP APNS

Viele der Tutorials für Apple Push Notifications erstellen eine Verbindung über stream_socket_client(). Den meisten fehlt jedoch das Flag "STREAM_CLIENT_PERSISTENT". Würde diese Markierung die Verbindung wirklich dauerhaft machen? Wenn ja, wann wäre es geschlossen? Die Dokumentation besagt, dass sie auch beim erneuten Laden der Seite verbunden bleibt. Ist das abhängig von Sitzungen?

Die Version ohne diese Flagge funktioniert, aber ich fürchte, der APNS wird mich blockieren, sobald ich die Produktionszertifikate usw. einstelle (beschrieben here). Vielen Dank im Voraus.

Antwort

6

Gemäß der PHP-Dokumentation auf Predefined Constants, STREAM_CLIENT_PERSISTENT mit der APNS Verbindung mit sollte aktiv zwischen Seite Lasten, die Verbindung halten. Dies ist eine Voraussetzung für die APNS-Verbindung, da es WILL Drosselung Sie, da es jede Verbindung nach dem Senden einer Payload eine potenzielle Denial-of-Service-Angriff betrachtet.

Sollten Sie Probleme mit dem Client außerhalb der verfügbaren Verbindungen haben, sollten Sie Folgendes versuchen, da dies die beste Art ist, mit der ich bisher eine APNS-Verbindung innerhalb von PHP zu bewältigen habe. Dies verwendet den Client von PHPXMLRPC, so dass Sie dieses Paket herunterladen müssen.

<?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"; 
} 

?> 

QUELLE: How to get started with APNS for iPhone or iTouch

Ich möchte die Zeit in Anspruch nehmen, darauf zu hinweisen, dass, ich habe jede dieser Code nicht getestet, ich habe nicht eine iPhone-Anwendung jetzt zu testen dies mit, so kann ich Ihnen sagen, ob das tatsächlich funktioniert.

Wenn es für Sie möglich ist, würde ich empfehlen, stattdessen Uban Airship zu verwenden, da sie jedem ihrer Kunden 250.000 kostenlose Pushs pro Monat bereitstellen und von dort aus die Verbindung zum APN Server für Sie übernehmen Sie verwenden ihre APIs, um mit Ihren Kunden zu sprechen.