2009-09-18 15 views
5

Quando provo a inviare notifiche push ottengo questo errore: "Connessione rifiutata", ma non so perché ... Ho caricato il mio apns-dev. pem nella stessa directory anche nella root-directory ma non funzionerà neanche.Le notifiche push (iPhone) danno "111 Connessione rifiutata"

<?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); 
?> 

Qualcuno sa cosa sto facendo male? Quando rimuovo la passphrase e non la invio, non funziona neanche ...

risposta

2

Non si desidera una passphrase a meno che il file .pem non ne richieda uno. La connessione richiede la verifica peer (opzione verify_peer) attivata. Inoltre, assicurati che $ apnsCert sia il percorso valido per il certificato, puoi utilizzare un percorso assoluto come controllo di integrità.

Infine, questo non dovrebbe influire sulla possibilità di connettersi, ma il token del dispositivo deve essere valido.

+0

Davvero grazie, vado a controllare se funziona. Intendi il percorso ftp (/public-html/directory/file.pem) o (http://www.server.com/directory/file.pem) per percorso assoluto? Ho ricevuto questo errore prima di inviare qualsiasi dato, quindi non è il token del dispositivo, penso ... Grazie: D! – elslooo

+0

Non funziona: (..., di seguito è la mia risposta per prevenire quell'errore. – elslooo

0

Ho so fisso che errore aggiungendo questo: STREAM_CLIENT_ASYNC_CONNECT | STREAM_CLIENT_CONNECT

so che non sono sempre gli eventuali errori, ma non ricevo alcuna notifica. Penso che il token di Dev non sia valido, quindi è così che appare

numeri numeri numeri numeri numeri numeri numeri numeri.

Gli spazi vengono rimossi in questa riga: $ apnsMessage = chr (0). chr (0). chr (32). pack ('H *', str_replace ('', '', $ deviceToken)). chr (0). chr (strlen ($ payload)). $ Payload;

Edit: ho fondato il problema: mio server rifiuta la porta in uscita, appena inviato una e-mail, nella speranza che possano attivarlo ...

6

assicurarsi che la porta in uscita 2195 è open.This sarebbe essere nella configurazione del firewall.

+0

Sì, questo era effettivamente il problema. Grazie per l'aiuto però. :) – elslooo

Problemi correlati