向多个iPhone设备发送推送通知时收到警告消息

3

当我使用PHP Web服务向多台iPhone设备发送推送通知时,我会收到以下警告消息:

Warning: stream_socket_client() [function.stream-socket-client]: SSL: crypto enabling timeout in /home/sample_app/pushnotification.php on line 66

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /home/sample_app/pushnotification.php on line 66

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.push.apple.com:2195 (Unknown error) in /home/sample_app/pushnotification.php on line 66

Warning: fclose() expects parameter 1 to be resource, boolean given in /home/sample_app/pushnotification.php on line 79

这是我的代码:
$message='testing';
$q1="select devicetoken from tbl_devicetokens";
$re1 = mysql_query($q1);
while($row1=mysql_fetch_row($re1))
{
    pushMessage($row1[0],$message,'myapp');
}


function pushMessage($deviceToken,$message,$app) {
    echo "Sending iPhone Push Notifications to " . $deviceToken . "<br /><br />";
    echo "Your Message: " . $message . "<br /><br />";
    $time = time();
    $apnsHost = 'gateway.push.apple.com';
    $apnsPort = 2195;
    $apnsCert = 'apns-myapp.pem';
    $streamContext = stream_context_create();
    stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
    $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
    if($apns) {
            $payload = array();
            $payload['aps'] = array('alert' => $message, 'badge' => 0, 'sound' => 'default');
            $payload = json_encode($payload);
            $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
            fwrite($apns, $apnsMessage);
    } else { 
            echo "Connection Failed - iPhone Push Notifications Server";
            echo $errorString."<br />";
            echo $error."<br />";
    }
    //socket_close($apns);
    fclose($apns);
}

所以,有人能告诉我如何解决这个问题吗?

1
https://dev59.com/g2Yq5IYBdhLWcg3w7E-w - Jonathon Reinhart
请发布您的代码。 - AlliterativeAlice
请查看此链接:http://stackoverflow.com/questions/15196145/apn-php-code-giving-warning-stream-socket-client-function-stream-socket-clie。 - Perry
请粘贴您的完整代码。此处仅需翻译文本内容。 - Murtaza Khursheed Hussain
2个回答

1

这个答案可能看起来有些愚蠢,但你尝试过检查你的防火墙/iptables了吗?对我来说,这些没有更多信息的错误看起来像是连接问题。你需要解决的第一件事就是超时问题。


1

当您向单个设备推送单个通知时,是否仍会发生这种情况?

如果是:

  • 您确定已经使用正确的证书路径吗?
  • 确保证书文件名只包含字母字符。

如果不是:

  • 确保您正在为正确的设备环境(开发、生产)使用正确的证书。
  • 如果设备越狱,则无法接收推送通知。

是的,我在向单个设备发送推送通知时会收到警告消息,即使我已经提供了正确的证书路径并且不允许在证书文件名中使用字母字符。 - lalith458

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接