2009-06-30 50 views
2

我有一個快速的問題。對於蘋果推送通知服務,我需要有我自己的服務器,它會將推送通知發送到蘋果服務器,對吧?服務器端iPhone APNS通信

我可以在一個普通的虛擬主機帳戶上用一個簡單的PHP腳本來做到這一點,還是我需要一個擁有完整管理員權限的專用服務器?

如果在PHP中這是可能的,任何人都可以指向我的一些樣本,可以幫助我開始呢?現在,我非常有信心在執行客戶端部分時不會遇到困難,但服務器端對我來說仍然有點神祕......

謝謝!

弗洛裏安

回答

1

你大概就能做到這一點在有限的託管帳戶,只要你可以離開開放的服務器大部分時間的連接。一些示例代碼:

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

還要注意,一些公司正在與推託管啓動服務,幫助您明確(我會保持中立後,不提名字,我不知道哪些服務是還在運行)。

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); 

答覆是連接建立 發送消息:d ^÷Îå0ZCd%1ÄuwOOYš'ÊÈ}ârðm¾Í,{ 「APS」:{ 「\ u2019alert \ u2019」: 「測試消息」}} 發送有效載荷:{ 「APS」:{ 「\ u2019alert \ u2019」: 「測試消息」}}

,但我沒能獲得通知

任何幫助嗎?