notificaciones - Error de lectura de la notificación push mejorada de Apple con PHP
notificaciones push iphone (1)
Tengo una solución para esto.
Solución:
$read = array($this->_apnsConnection);
$null = null;
$changedStreams = stream_select($read, $null, $null, 0, 1000000);
if ($changedStreams === false) {
$this->_log("Error: Unabled to wait for a stream availability");
} elseif ($changedStreams > 0) {
$responseBinary = fread($this->_apnsConnection, 6);
if ($responseBinary !== false || strlen($responseBinary) == 6) {
$response = unpack(''Ccommand/Cstatus_code/Nidentifier'', $responseBinary);
$this->_log($response);
}
}
Estoy tratando de desencadenar un error para poder construir el registro de errores para APNS. Por lo tanto estoy enviando una carga útil demasiado grande al servidor. Pero no obtengo ningún error.
Código:
Conectando:
$streamContext = stream_context_create();
stream_context_set_option($streamContext, ''ssl'', ''local_cert'', $this->_sslPem);
stream_context_set_option($streamContext, ''ssl'', ''passphrase'', "");
$this->_apnsConnection = stream_socket_client("ssl://" . Config::$apns[''host''] . ":" . Config::$apns[''port''], $error, $errorString, $timeout, STREAM_CLIENT_CONNECT, $streamContext);
if ($this->_apnsConnection) {
stream_set_blocking($this->_apnsConnection, 0);
}
Envío de notificación:
$this->_log("Sending notification to device token ''$deviceToken''");
$identifiers = array();
for ($i = 0; $i < 4; $i++) {
$identifiers[$i] = rand(1, 100);
}
$apnsMessage = chr(1) . chr($identifiers[0]) . chr($identifiers[1]) . chr($identifiers[2]) . chr($identifiers[3]) . pack(''N'', time() + 3600)
. chr(0) . chr(32) . pack(''H*'', str_replace('' '', '''', $deviceToken)) . chr(0) . chr(strlen($message)) . $message;
$bytes = fwrite($this->_apnsConnection, $apnsMessage);
$this->_log("bytes written: $bytes");
$this->_log("Fetching response");
$response = fread($this->_apnsConnection, 6);
$this->_log("Strlen: " . strlen($response));
if ($response === false || strlen($response) != 6) {
$this->_log("No response...");
} else {
$responseArray = unpack(''Ccommand/CstatusCode/Nidentifier'', $response);
$this->_log("Response!");
$this->_log($responseArray);
}
Salida:
2011-07-12 16:25:55: Sending notification to device token ''XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX''
2011-07-12 16:25:55: bytes written: 438
2011-07-12 16:25:55: Fetching response
2011-07-12 16:25:55: Strlen: 0
2011-07-12 16:25:55: No response...