ApnsPHP无法连接到Apple Gateway

时间:2011-06-08 13:08:40

标签: php apple-push-notifications

今天突然出现一个非常奇怪的错误,说它无法连接到相应的网关...任何修复建议?

这是记录器输出:

Wed, 08 Jun 2011 15:05:44 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Wed, 08 Jun 2011 15:05:45 +0200 ApnsPHP[21724]: ERROR: Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195':  (0)
Wed, 08 Jun 2011 15:05:45 +0200 ApnsPHP[21724]: INFO: Retry to connect (1/3)...
Wed, 08 Jun 2011 15:05:46 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Wed, 08 Jun 2011 15:05:47 +0200 ApnsPHP[21724]: ERROR: Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195':  (0)
Wed, 08 Jun 2011 15:05:47 +0200 ApnsPHP[21724]: INFO: Retry to connect (2/3)...
Wed, 08 Jun 2011 15:05:48 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...
Wed, 08 Jun 2011 15:05:48 +0200 ApnsPHP[21724]: ERROR: Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195':  (0)
Wed, 08 Jun 2011 15:05:48 +0200 ApnsPHP[21724]: INFO: Retry to connect (3/3)...
Wed, 08 Jun 2011 15:05:49 +0200 ApnsPHP[21724]: INFO: Trying ssl://gateway.sandbox.push.apple.com:2195...

Fatal error: Uncaught exception 'ApnsPHP_Exception' with message 'Unable to connect to 'ssl://gateway.sandbox.push.apple.com:2195':  (0)' in /home/xxxx/xxxxx/ApnsPHP/Abstract.php:354

7 个答案:

答案 0 :(得分:17)

这个解决方案对我有用。原始答案在Push notifications server implementation -

我找到了一个解决方案,我不知道它是否是最好的,但它确实有效。在Abstract.php(这个文件是apns-php源码的一部分)我已经评论了第343行。现在它看起来像这样:

$streamContext = stream_context_create(array('ssl' => array(
//'verify_peer' => isset($this->_sRootCertificationAuthorityFile),
'cafile' => $this->_sRootCertificationAuthorityFile,
'local_cert' => $this->_sProviderCertificateFile
)));

我真的不知道这一行有什么意义,但知道推送通知正常。

答案 1 :(得分:8)

我的情况我更改了第58行和第59行文件ApnsPHP / Push.php 这个      protected $_aServiceURLs = array( 'ssl://gateway.push.apple.com:2195', // Production environment 'ssl://gateway.sandbox.push.apple.com:2195' // Sandbox environment ); /< @type array Service URLs environments. */ 同      protected $_aServiceURLs = array( 'gateway.push.apple.com:2195', // Production environment 'gateway.sandbox.push.apple.com:2195' // Sandbox environment ); / < @type array Service URLs environments. */

答案 2 :(得分:4)

您可能会检查是否安装了正确的证书。请查看以下网址:https://code.google.com/p/apns-php/wiki/CertificateCreation以生成“entrust_root_certification_authority.pem”文件。

您可以通过在sample_push.php上注释以下行来跳过证书验证:

    //$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');

希望它有所帮助。问候。

答案 3 :(得分:0)

请检查apple doc中指定的端口。 您必须打开提供商端系统上的端口。

答案 4 :(得分:0)

我得到了同样的错误。我谷歌了很多,并按照本指南的每一步,确保我的pem文件正确生成: https://code.google.com/p/apns-php/wiki/CertificateCreation

然后我运行以下命令来检查apns的安全链接是否正确:

 openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns-dev-cert.pem -key apns-dev-key.pem -CApath /etc/ssl/certs/Entrust_Root_Certification_Authority.pem 

按回车键,我收到了这个提示:

Enter pass phrase for apns-dev-key.pem:

然后我意识到我忘了为证书设置密码(在我的情况下是dev.pem)

// Instantiate a new ApnsPHP_Push object
$this->push = new ApnsPHP_Push(
    ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
    'dev.pem'
);
// Set the Provider Certificate passphrase
$this->push->setProviderCertificatePassphrase($passphrase);
// Set the Root Certificate Autority to verify the Apple remote peer
$this->push->setRootCertificationAuthority('entrust_root_certification_authority.pem');
// Connect to the Apple Push Notification Service
$this->push->connect();
// Instantiate a new Message with a single recipient
$this->message = new ApnsPHP_Message($deviceToken);

为apns pem设置正确的密码,问题解决了。

答案 5 :(得分:0)

我有同样的问题,我做错了是为SSL客户端身份验证和根CA提供相同的证书,下面代码为我工作

$push = new ApnsPHP_Push(
        ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
        'ck.pem'
    );

$push->setRootCertificationAuthority('entrust_root_certification_authority.pem');

https://code.google.com/p/apns-php/wiki/CertificateCreation

答案 6 :(得分:0)

开发人员需要以不同方式导出APNS证书及其密钥。如果两者都一次性导出,则会出现此错误。