2009-09-18 22 views
5

जब मैं पुश अधिसूचनाएं भेजने की कोशिश करता हूं तो मुझे यह त्रुटि मिलती है: "कनेक्शन से इनकार कर दिया गया", लेकिन मुझे नहीं पता कि क्यों ... मैंने अपना apns-dev अपलोड किया है। उसी निर्देशिका में पेम-रूट निर्देशिका में पेम लेकिन यह भी काम नहीं करेगा।पुश अधिसूचनाएं (आईफोन) "111 कनेक्शन से इनकार कर दिया"

<?php 
$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => 1, 'sound' => 'default'); 
$payload = json_encode($payload); 
$apnsHost = 'gateway.sandbox.push.apple.com'; 
$apnsPort = 2195; 
$apnsCert = 'apns-dev.pem'; 
$apnsPass = 'secret'; 

$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 
stream_context_set_option($streamContext, 'ssl', 'passphrase', $apnsPass); 

$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 60, STREAM_CLIENT_CONNECT, $streamContext); 

if (!$apns) { 
    echo "Error: $errorString ($error)"; 
} 

// Do this for each 
$deviceToken = '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000'; 
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload; 
fwrite($apns, $apnsMessage); 
// End do 

socket_close($apns); 
fclose($apns); 
?> 

क्या कोई जानता है कि मैं क्या गलत कर रहा हूं? जब मैं पासफ्रेज को हटा देता हूं और इसे नहीं भेजता तो यह काम नहीं करता है ...

उत्तर

2

आप पासफ्रेज़ नहीं चाहते हैं जब तक आपकी .pem फ़ाइल को एक की आवश्यकता न हो। कनेक्शन को सहकर्मी सत्यापन (विकल्प verify_peer) चालू करने की आवश्यकता है। साथ ही, सुनिश्चित करें कि $ apnsCert प्रमाणपत्र के लिए वैध पथ है, आप एक स्वच्छता जांच के रूप में एक पूर्ण पथ का उपयोग कर सकते हैं।

अंततः, यह कनेक्ट करने की आपकी क्षमता को प्रभावित नहीं करेगा, लेकिन आपके डिवाइस टोकन को वैध होने की आवश्यकता है।

+0

वास्तव में धन्यवाद, मैं यह जांचने जा रहा हूं कि यह काम करता है या नहीं। क्या आपका मतलब पूर्ण पथ से ftp-path (/public-html/directory/file.pem) या (http://www.server.com/directory/file.pem) है? मुझे कोई डेटा भेजने से पहले मुझे यह त्रुटि मिलती है, इसलिए यह डिवाइस-टोकन नहीं है, मुझे लगता है ... धन्यवाद: डी! – elslooo

+0

यह काम नहीं करता है: (..., नीचे उस त्रुटि को रोकने के लिए मेरा जवाब है। – elslooo

0

मैं इस जोड़कर कि त्रुटि ठीक कर दी पता: STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT

पता मैं किसी भी त्रुटि नहीं मिल रहा है, लेकिन मैं कोई सूचना प्राप्त नहीं है। मुझे लगता है कि देव-टोकन मान्य नहीं है, इसलिए, यह

संख्या संख्या संख्या संख्या संख्या संख्या संख्याओं की संख्या है।

इस लाइन में रिक्त स्थान हटा दिए गए हैं: $ apnsMessage = chr (0)। सीआर (0)। सीआर (32)। पैक ('एच *', str_replace ('', '', $ डिवाइस टोकन))। सीआर (0)। सीआर (स्ट्रेलन ($ पेलोड))। $ पेलोड;

संपादित करें: मैं इस समस्या की स्थापना: मेरे सर्वर है बाहर जाने वाले बंदरगाह से इनकार कर, बस एक मेल भेजा, उम्मीद है वे इसे सक्रिय कर सकते हैं ...

6

सुनिश्चित करें कि बाहर जाने वाले पोर्ट 2195 open.This होता है अपने फ़ायरवॉल कॉन्फ़िगरेशन में रहें।

+0

हाँ, वास्तव में समस्या थी। हालांकि मदद करने के लिए धन्यवाद। :) – elslooo

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