从PHP增强苹果推送通知读取错误 [英] Reading error from Apple enhanced push notification with PHP

查看:159
本文介绍了从PHP增强苹果推送通知读取错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着去触发一个错误,所以我可以在APNS错误记录建立。因此林发送过大负载到服务器。但我没有得到任何错误。

code:

连接:

  $ streamContext = stream_context_create();
stream_context_set_option($ streamContext,SSL,的local_cert',​​$这个 - > _sslPem);
stream_context_set_option($ streamContext,SSL,密码,);。$这个 - > _apnsConnection =在stream_socket_client(SSL://配置:: $ APNS ['主机']:配置:: $ APNS ['口'],$错误,$为errorString,$超时。 ,STREAM_CLIENT_CONNECT,$ streamContext);如果($这个 - > _apnsConnection){
    stream_set_blocking($这 - > _apnsConnection,0);
}

发送通知:

  $这个 - > _log(发送通知设备令牌'$ deviceToken');$标识符=阵列();
为($ I = 0; $ I 4;; $ I ++){
    $标识符[$ i] =兰特(1,100);
}$ apnsMessage = CHR(1)。字符($标识符[0])。字符($标识符[1])。字符($标识符[2])。字符($标识符[3])。包('N',时间()+ 3600)
    。字符(0)。字符(32)。包(H *',str_replace函数('','',$ deviceToken))。字符(0)。 CHR(strlen的($消息))。 $消息;
$字节= FWRITE($这个 - > _apnsConnection,$ apnsMessage);$这个 - > _log(字节写:$字节);$这个 - > _log(读取响应);
$响应= FREAD($这个 - > _apnsConnection,6);$这个 - > _log(strlen的:strlen的($响应));如果($响应===假||的strlen($回应)!= 6){    $这个 - > _log(无响应...);
}其他{    $ responseArray =解压('的CCommand / Cstatus code / Nidentifier',$响应);
    $这个 - > _log(回应!);
    $这个 - > _log($ responseArray);
}

输出:

  2011-07-12 16点25分55秒:发送通知到设备令牌'XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
2011-07-12 16点25分55秒:字节写:438
2011-07-12 16点25分55秒:抓取响应
2011-07-12 16点25分55秒:STRLEN:0
2011-07-12 16点25分55秒:不回应...


解决方案

我得到了一个解决方案。

解决方案:

  $读=阵列($这个 - > _apnsConnection);
$空= NULL;
$ changedStreams = stream_select($读$空,$ NULL,0,1000000);如果($ changedStreams === FALSE){    $这个 - > _log(错误:Unabled等待流可用性);
} elseif的($ changedStreams大于0){    $ responseBinary = FREAD($这个 - > _apnsConnection,6);
    如果($ responseBinary!== ||假的strlen($ responseBinary)== 6){        $响应=解压('的CCommand / Cstatus_ code / Nidentifier',$ responseBinary);
        $这个 - > _log($响应);
    }
}

Im trying to trigger an error so I can build in error logging for APNS. Therefore Im sending a too large payload to the server. But I get no error.

Code:

Connecting:

$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);
}

Sending notification:

$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);
}

Output:

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...

解决方案

I got a solution for this.

Solution:

$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);
    }
}

这篇关于从PHP增强苹果推送通知读取错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆