【问题标题】:Push Notification Failed to connect no error string推送通知连接失败无错误字符串
【发布时间】:2013-03-22 06:49:33
【问题描述】:

我在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 END

我无法连接 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

请帮忙

【问题讨论】:

  • 您确定您使用的是正确的安全证书吗?
  • 是的,我确定我有正确的 PEM 证书。 iphone 的人尝试从他们的一端发送推送,并且成功了。我不知道他们的方式,但我看到推动来了
  • @Sharmaji 您正在使用 linux 服务器或 windows 并使用开发者证书。
  • @AdvaitAmin 我正在使用 linux 服务器。我以前从未在推送通知项目中使用过开发者证书。我只使用了 iPhone 提供的 PEM 文件。你能解释一下它是什么吗?
  • @Sharmaji,在 PEM 中有两种类型的证书。(1)开发人员(2)生产。应用在应用商店上线时用于正常测试和生产的开发人员。

标签: php iphone ios push-notification


【解决方案1】:

最后我能够使用 Google APNS 库做到这一点。我之前的代码在 6 个项目中运行良好,但是当我浏览了这个文档时

http://developer.apple.com/library/mac/#technotes/tn2265/_index.html

我发现除了由 iOS Provisioning Portal 或 Mac Developer Certificate Utility 创建的 SSL 身份(证书和关联的私钥)外,您还应该在您的提供商上安装 Entrust CA (2048) 根证书
连接到推送服务的问题

我从https://www.entrust.net/downloads/binary/entrust_2048_ca.cer 下载了委托根证书,并通过 iphone 开发人员使用 pem 证书在服务器上安装/上传,它工作正常。

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

【讨论】:

  • 我也有同样的问题。我阅读了文档:我应该要求我的提供商安装 Entrust CA 证书还是应该简单地将其复制到 SSL 身份附近?所有开发人员的 CA 证书都一样吗?谢谢
猜你喜欢
  • 2013-09-02
  • 2014-04-04
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多