推送通知连接失败,没有错误字符串


Push Notification Failed to connect no error string

我在stackoverflow上浏览了几乎所有与此相关的线程,但没有帮助我很多,可能是我没有很好地理解。当我使用php代码发送推送通知时,它会说连接失败。我在之前的许多其他项目中使用了相同的代码。但是这次我找不到问题在哪里

PHP代码

  $status_message="Failure"; 
  $deviceToken = "";
  $userExist=1;
  $message = 'You Recieved a new Notifcation from test';
  $badge = (int)1;
  $sound = 'cow.caf';
  $body = array();
  if($userExist==1) 
  {
      $body['aps'] = array('alert' => $message);
      $body['aps']['sound'] = $sound;
     if(isset($badge)) 
   {
    $body['aps']['badge'] = $badge;
    }
     else
    {
    $body['aps']['message'] = $message;
    }
   }
    $ctx = stream_context_create();
    stream_context_set_option($ctx,'ssl','local_cert','apns-dev.pem');
    stream_context_set_option($ctx,'ssl','verify_peer',false);
    $fp = @stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', 
     $err,$errstr, 60, "STREAM_CLIENT_CONNECT", $ctx);
   if (!$fp) 
    {
       print "Failed to connect $err $errstr'n";
       print_r($err);
       return;
    }
  else 
    {
      print "Connection OK'n";
    }
IPhone

连接0 0失败。我和iphone的人聊过,他们说他们的PEM是正确的,这是另一个可能的原因。但他们在他们的终点进行了测试,并在他们的终点进行了推动。他们确信自己是对的。PEM文件在服务器上的正确位置

现在是服务器设置,他们已经启用了tcp 2195,2196

服务器端

root@servername [~]# openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
root@servername [~]# iptables -nL | grep 2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2195
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2195
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:2195
root@servername [~]# iptables -nL | grep 2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2196
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:2196

我尝试用PUTTY验证telnet gateway.push.apple.com 2195,它正在从服务器连接。

我不知道问题出在哪里。我确信代码,因为我在6个项目中使用了相同的文件。我的主机是VPS

请帮

最后我能够使用Google APNS库做到这一点。我之前的代码在6个项目中工作得很好,但当我看完这个文档

http://developer.apple.com/library/mac/技术说明/tn2265 _index.html

我发现除了由iOS Provisioning Portal或Mac Developer certificate Utility创建的SSL身份(证书和关联的私钥)之外,您还应该在
列下的提供商
上安装委托CA(2048)根证书。连接Push服务出现问题

我从https://www.entrust.net/downloads/binary/entrust_2048_ca.cer下载了委托根证书,iphone开发人员在服务器上安装并上传了pem证书,并成功了。

如果有人有同样的问题,请按此操作。