2012-06-08 11 views
5

मुझे पता है कि एसओ पर कई पोस्ट हैं जो इस समस्या को हल करते हैं, दुर्भाग्य से मैं PHP प्रोग्रामिंग में उन्नत नहीं हूं और मेरे पास एक प्रश्न है जिसका उत्तर कहीं और नहीं दिया गया है:PHP से एपीएनएस

ऐप्पल पुश अधिसूचनाओं के लिए कई ट्यूटोरियल stream_socket_client() के माध्यम से एक कनेक्शन बनाते हैं। लेकिन उनमें से अधिकतर ध्वज "STREAM_CLIENT_PERSISTENT" की कमी कर रहे हैं। क्या यह ध्वज कनेक्शन को वास्तव में लगातार बनाएगा? यदि ऐसा है तो यह कब बंद होगा? दस्तावेज कहता है कि यह पेज रीलोड पर भी जुड़े रहेंगे। क्या यह सत्रों के आधार पर है?

इस ध्वज के बिना संस्करण काम कर रहा है, लेकिन मुझे डर है कि जैसे ही मैं उत्पादन प्रमाणपत्र आदि में डालता हूं, एपीएनएस मुझे अवरुद्ध कर देगा (वर्णित here)। अग्रिम धन्यवाद।

उत्तर

6

प्रति Predefined Constants पर पीएचपी प्रलेखन के रूप में, STREAM_CLIENT_PERSISTENT का उपयोग कर 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"; 
} 

?> 

स्रोत: How to get started with APNS for iPhone or iTouch

मैं समय लेने के लिए, करते रहे कि, मैं इस कोड के किसी भी परीक्षण नहीं किया गया है चाहते हैं, मैं परीक्षण करने के लिए अभी एक iPhone आवेदन की जरूरत नहीं है इसके साथ, इसलिए मैं आपको बता सकता हूं कि यह वास्तव में काम करता है या नहीं।

यदि यह आपके लिए व्यवहार्य है, तो मैं आपको सलाह दूंगा कि आप इसके बजाय उबान एयरशिप का उपयोग करें, क्योंकि वे अपने प्रत्येक ग्राहक को 250,000 मुफ्त पुश प्रदान करते हैं, और जो आपके लिए एपीएन सर्वर से कनेक्शन को संभालते हैं, वहां से आप अपने ग्राहकों से बात करने के लिए अपने APIs का उपयोग करते हैं।

संबंधित मुद्दे