2012-04-04 49 views
0

自从昨晚我一直在寻找答案,但它似乎找不到任何人有完全相同的问题。类似但不是。我试图通过stream_socket_client连接到Apples APNS。我在LAMP环境中工作并打开端口2195。我的errorString说(权限被拒绝)。我的麻烦是找到发布了关于这个错误的很多信息的人。我从错误报告得到警告警告:stream_socket_client():无法连接到SSL://gateway.sandbox.push.apple.com:2195(拒绝)PHP IOS推送通知(权限被拒绝)

至于好东东。我写了一个类来处理这个推送通知。这是设置连接的不受干扰的方法。

public function setConnection() { 

     $apnsHost = 'gateway.sandbox.push.apple.com'; 
     $apnsPort = 2195; 
     $apnsCert = '../model/apns-dev.pem'; 

     $streamContext = stream_context_create(); 
     stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 
     stream_context_set_option($streamContext, 'ssl', 'passphrase', "********"); 
     stream_context_set_option($streamContext, 'ssl', 'verify_peer', true); 

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

    } 

对我来说这看起来很正确,但很明显,这是不对的。

回答

0

以下教程中的simplepush.php代码适用于我。 http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 
+0

这实际上是openssl的服务器问题,我认为。我改变了一些配置,现在它可以工作。感谢您的高举。哦,不要使用verify_peer选项。 – 2012-04-05 18:54:02

+0

@TimLieberman您在服务器上所做的更改,请在此处填写,以便我也可以检查我的配置。谢谢 – Ron 2013-09-03 07:30:04

+0

@Ron我不记得问题是什么或我们如何解决这个问题。我很抱歉,当我发现时我应该更新这个问题。 – 2013-09-20 13:38:09