苹果推送通知..拒绝?

时间:2011-09-14 16:44:50

标签: php ios apple-push-notifications

我需要用php服务器实现苹果推送通知。我认为连接正常工作但苹果服务器出于某种原因拒绝了该消息。

我收到了这个错误:

  

“error 0errorString
\ n 致命错误:调用未定义   函数socket_close()    /home/www/76cdd1fbdfc5aca0c9f07f489ecd9188/web/mobileApp/handleRequest.php 的   在线 420
\ n“

这是我的简单代码(带有假邮件,仅供测试):

$payload['aps'] = array('alert' => 'This is the alert text', 'badge' => unread, 'sound' => 'default');
    $payload['server'] = array('serverId' => $serverId, 'name' => $name);
    $payload = json_encode($payload);

    $apnsHost = 'gateway.sandbox.push.apple.com';
    $apnsPort = 2195;
    $apnsCert = 'ck.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);

    echo "error " . $error;
    echo "errorString" . $errorString;

    $apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
    fwrite($apns, $apnsMessage);

    socket_close($apns);
    fclose($apns);


    echo "Sent";

感谢

5 个答案:

答案 0 :(得分:1)

我猜你的PHP版本可能没有安装或启用套接字功能,这就是你收到错误的原因。

取自PHP.net

  

此处描述的套接字函数是PHP扩展的一部分,必须在编译时通过提供--enable-sockets选项来启用它。

但是对于您的代码,您不需要使用socket_close($apns)函数。相反,你可以删除它并使用关闭(Quote from PHP.net):

  

成功时返回一个流资源,该资源可以与其他文件函数(例如fgets(),fgetss(),fwrite(),fclose()和feof())一起使用,失败时为FALSE。 / p>

因此,使用fclose($apns);将关闭流

答案 1 :(得分:1)

没有关闭套接字的功能,你只能创建套接字并通过fwrite / fclose等管理它: http://php.net/manual/en/function.stream-socket-client.php

答案 2 :(得分:0)

替换:

socket_close($apns);

fclose($apns);

这应该可以解决您报告的错误:不确定这是否会真正解决您对APNS的问题。

答案 3 :(得分:0)

我实际上已经解决了。问题是消息的内容(空)。套接字功能完美无缺。

答案 4 :(得分:0)

$apnsHost = 'gateway.sandbox.push.apple.com';

删除" 沙箱"从这个网址开始,它就会运行。