发送 iOS 推送通知时超时

Posted

技术标签:

【中文标题】发送 iOS 推送通知时超时【英文标题】:Time out when sending iOS push Notifications 【发布时间】:2014-07-10 12:39:34 【问题描述】:

我一直在寻找有关我的问题的几个星期,但我找不到解决方案。我已经尝试了与 ios 推送通知服务相关的所有内容,但没有任何效果。这是我的问题:

将我的php 文件和.pem 文件上传到我的服务器时,我在发送通知时收到timed out error

    我的生产证书 100% 有效,因为我在本地机器上测试脚本并发送通知。

    我使用了正确的 URL:gateway.push.apple.com 和正确的端口 2195

    我知道设备令牌在我投入生产时会发生变化。

    我的服务器没有防火墙,它打开了17.xxxx 端口。

    我在开发中测试了通知,它在服务器上运行。

    我正在使用指向我的证书的绝对路径/home/project/public_html/ck.pem

所以我只想知道在从开发更改为生产时,我的服务器上是否有任何新配置需要做,因为它在前一段时间使用开发证书。

请注意,通知在我的本地机器上使用 MAMP 和生产证书工作。

编辑

这是我用来发送简单通知的代码:

    <?php


    $deviceToken = 'DISTRIBUTION TOKEN';


    $passphrase = '*******';


    $message = 'Hey! It's working';



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

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

if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);

echo 'Connected to APNS' . PHP_EOL;

// Create the payload body
$body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );

// Encode the payload as JSON
$payload = json_encode($body);

// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));

if (!$result)
    echo 'Message not delivered' . PHP_EOL;
else
    echo 'Message successfully delivered' . PHP_EOL;

// Close the connection to the server
fclose($fp);

?>

【问题讨论】:

用代码编辑过的帖子 简单、免费、即时和多平台(ios、android、win)尝试使用这个parse.com ***.com/questions/19025488/… 你在 iOS 8 上测试吗? 你试过 curl 吗?在那里验证它并完成它。 【参考方案1】:

这也发生在我身上,原因原来是我的服务器阻塞了 2195 端口.. 尝试从终端运行此命令到您的服务器

telnet gateway.push.apple.com 2195

您应该得到以下响应 正在尝试 17.172.234.2... 连接到 gateway.push-apple.com.akadns.net。 转义字符是'^]'。

如果你的连接超时,那么你的服务器阻塞了 2195 端口

【讨论】:

【参考方案2】:

你能不能把php代码改成

 $message = 'Hey! It's working';

 $message = "Hey! It's working";

你确定吗 1.你传递了正确的 deviceToken 吗? 2.在ios app中使用生产证书。 3. 在为生产创建ck.pem时,您是否使用CSR的公钥导出pem?

【讨论】:

以上是关于发送 iOS 推送通知时超时的主要内容,如果未能解决你的问题,请参考以下文章

当用户到达特定位置时向用户发送推送通知 [IOS]

向 iOS PushSharp 证书发送推送通知

iOS 推送通知垃圾邮件

***应用如何几乎同时发送多个 ios 推送通知?

通过 FCM 发送时未收到推送通知,但在 IOS 上通过 APN 发送时收到

收到消息时向 iOS 推送通知不起作用