【问题标题】:APNS with Google App Engine and PHP SSL error带有 Google App Engine 和 PHP SSL 错误的 APNS
【发布时间】:2015-08-09 09:52:59
【问题描述】:

我正在尝试从 PHP App Engine 后端发送 iOS 推送通知,但我收到以下错误。我不确定证书是否存在问题、我执行此操作的方式或 App Engine 特有的问题。这是我第一次向 iOS 发送推送通知。

这是我的代码:

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

$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
{
  //Handle Error
}

$body['aps'] = array(
  'alert' => $data["message"],
  'sound' => 'default',
);
$body["postID"] = $data["postID"];
$body["groupID"] = $data["groupID"];
$body["type"] = $data["type"];

$payload = json_encode($body);

foreach ($registrationIds as $registrationID)
{
  $deviceToken = $registrationID;
  $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
  $result = fwrite($fp, $msg, strlen($msg));
}

fclose($fp);

这是我得到的错误:

PHP Warning:  stream_socket_client(): SSL operation failed with code 1. OpenSSL 
Error messages: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake 
failure in fakefile.php

我不知道是什么原因。提前致谢

更新: 那不再是我得到的错误。现在我明白了:

PHP Warning:  stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error)

【问题讨论】:

  • APNS文件夹的权限是什么,是嵌套权限吗?
  • 我无法控制应用引擎中的文件夹权限,但据我所知,人们已经在应用引擎上成功实现了推送通知,所以我认为权限是正确的。
  • 你还在面对这个问题吗?你能提供你自己的local cert吗?您是否知道limitations of sockets on App Engine 无法绑定特定的IP 地址或端口?

标签: php ios google-app-engine ssl apple-push-notifications


【解决方案1】:

可能是您的端口 2195 和 2196 从阻止推送通知的服务器端关闭。

【讨论】:

  • 检查ck.pem文件的地址... ck.pem文件是从苹果开发或分发证书中提取的....这些证书应该有推送通知的权限..如果这样,请从苹果方面检查是问题
  • 我查过了。这不是问题@Babar
【解决方案2】:

在 stream_context_set_option 中,您没有包含 ck.pem 文件的完整路径。给出完整路径后没有错误。

以下代码可能有助于解决您的问题。

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', '/Users/Development/Dev/ck.pem');

以下检查端口的代码已启用推送通知。

<?php

chkServer('gateway.sandbox.push.apple.com', 2195);
//chkServer('gateway.push.apple.com',2195); 

function chkServer($host, $port)
{
    $hostip = @gethostbyname($host);

    if ($hostip == $host) {
        echo "Server is down or does not exist";
    } else {
        if (!$x = @fsockopen($hostip, $port, $errno, $errstr, 5)) {
            echo "Port $port is closed.";
        } else {
            echo "Port $port is open.";
            if ($x) {
                @fclose($x);
            }
        }
    }
}
?>

编码愉快。

【讨论】:

  • 首先检查端口是否启用@TheSabby
  • 我检查了端口是开放的。我还添加了完整路径,但仍然没有。谢谢@Nimit Parekh
  • /base/data/home/apps/s~MYAPPID/Includes/Functions/ck.pem
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 2010-09-16
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多