服务器端iPhone APNS通信

时间:2009-06-30 04:55:02

标签: php iphone push-notification

我有一个简单的问题。对于苹果推送通知服务,我需要拥有自己的服务器,它会将推送通知发送到苹果服务器,对吗?

我可以在常规虚拟主机帐户上使用简单的PHP脚本执行此操作,还是需要具有完全管理员访问权限的专用服务器?

如果在PHP中可以实现这一点,那么有人能指出一些可以帮助我开始这个的样本吗?现在,我非常有信心我不会在实现客户端部分时遇到麻烦,但服务器端对我来说仍然有些神秘......

谢谢!

弗洛里安

2 个答案:

答案 0 :(得分:1)

您可能可以在有限的主机帐户上执行此操作,只要您可以在大多数时间将连接保持打开状态。一些示例代码:

http://code.google.com/p/php-apns/

另请注意,有些公司正在启动服务,以帮助您专门推送托管(我会保持帖子中立而不提名称,我不确定哪些服务正在运行)。

答案 1 :(得分:1)

APNS的主要问题是端口

这么多提供商都没有打开2195端口

所以最初要专注于那个然后去主机提供商

以下是我尝试的代码,但有一个问题是无法获取设备通知

嗨,

我尝试了以下代码(PHP)

$apnsHost = 'gateway.sandbox.push.apple.com';
$apnsPort = 2195;
$apnsCert = 'apple_push_notification_production.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)
{
    echo "Connection Established<br/>";
    $deviceToken = '**********';//masked

    $body = array();
    $body['aps'] = array(’alert’ => "test message");
    //$body['aps']['badge'] = 1;

    $payload = json_encode($body);


    $apnsMessage = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
    print "sending message :" . $apnsMessage . "<br/>";
    print "sending payload :" . $payload . "<br/>";
    fwrite($apns, $apnsMessage);

}
else
{   
    echo "Connection Failed";

    echo $errorString;
    echo $error;
}
socket_close($apns);
fclose($apns);  

回复是Connection Established 发送消息: d ^÷Îå0ZCd%1ÄuwOOYš'ÊÈ}ârðm¾Í ,{“aps”:{“\ u2019alert \ u2019”:“test message”}} 发送有效载荷:{“aps”:{“\ u2019alert \ u2019”:“测试消息”}}

但我无法收到通知

任何帮助?