繁体   English   中英

向iOS应用发送推送通知:Google Cloud

[英]Send push notification to ios app : Google cloud

我已经将我的PHP代码托管在Google云上。

我想向iOS应用发送推送通知。 我已启用端口2195和2196。

发送推送通知时,出现以下错误:

警告:stream_socket_client():SSL:对等重置连接

警告:stream_socket_client():无法启用加密

警告:stream_socket_client():无法连接到ssl://gateway.push.apple.com:2195(未知错误)

我对Google Cloud不太熟悉。 我应该怎么做才能使其正常工作?

这是代码:

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', PEM_FILE_PATH . 'apns-dev.pem');

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

if (!$fp) {
    $data['msgs'] = "Failed to connect $err $errstr \n";
} else {
    $payload = json_encode($body);
    $msg = chr(0) . pack("n", 32) . pack("H*", str_replace(" ", "", $deviceToken)) . pack("n", strlen($payload)) . $payload;

    $result = fwrite($fp, $msg);

    if (!$result) {
        $data['msgs'] = 'Message not delivered'; //. PHP_EOL;
    } else {
        $data['msgs'] = 'Success'; //. PHP_EOL;
    }

    fclose($fp);
}
return $data;

当我们尝试将数据发送到APNS(Apple推送通知服务)服务器时,主要问题是SSL证书

APNS使用此技术来为其用户提供更安全的连接。

正如APNS文档中所说:“ 每个证书都限于一个应用程序,还限于两个开发环境之一,每个开发环境都有自己分配的主机名 ”。 这样就可以使用两种环境

  • 开发 (测试环境): ssl://gateway.sandbox.push.apple.com:2195

  • 生产 (一旦启动该应用程序): ssl://gateway.push.apple.com:2195

如果要测试是否可以连接到APNS服务器,请尝试以下命令:

$ telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.

如果出现错误,请确保防火墙允许端口2195上的传出连接。

然后,您可以测试您的SSL证书和私钥是否正常运行,并可以建立安全连接:

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourDevCert.pem -key YourPrivateKey.pem
Enter pass phrase for YourPrivateKey.pem: ******

如果这样做有效,则意味着您的证书已正确设置(您应该看到一堆输出,这是openssl,可让您了解幕后情况)。

知道了所有这些信息后,我发现您的代码中有一个错误,还应该检查其他内容:

  • 检查您与APNS服务器的连接是否良好。
  • 检查您的$payload变量是否为json字符串。
  • 检查您是否具有正确的$deviceToken
  • 检查您所使用的证书具有正确的环境。 在这种情况下,您要设置apns-dev.pem证书并将其发送到生产环境(我认为您的生产证书是apns-prod.pem因此请对其进行检查)。
  • 检查您的PHP文件是否可以找到您的证书。
  • 问题之一 ,您没有为私钥设置任何密码。 添加证书后,应添加以下行:

stream_context_set_option($ctx, "ssl", "passphrase", "your_private_key");

如果您有任何麻烦或疑问,我将按照本教程发送第一个APNS推送通知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM