2009-08-17 144 views
2

我們正在測試一個具有APNS的應用程序,並且已經注意到沙箱環境的APNS服務有時會停止「推送」。該消息被蘋果服務器成功接收,沒有錯誤。沒有來自反饋服務的傳入消息(我們已成功收到有關其他事情的反饋)。我們的這個功能的代碼庫在一段時間後並沒有改變,並且一直在穩定運行。如何判斷蘋果推送通知服務APNS是否有效

我的問題是,蘋果是否有某種我們可以發送的ping讓我們知道沙盒APNS是否仍然有效?

謝謝。

+0

你在服務器端使用哪種語言? – Sam 2009-08-31 05:16:14

回答

1

AFAIK,判斷服務是否不起作用的唯一方法是,如果您的套接字連接有問題。

在測試中,我發現我的deviceId在一個點上不正確,並阻止我接收消息。

此外,並非所有的郵件傳遞都是有保證的,我相信只有最後發送的郵件才能得到保證。您是否收到來自該批次的任何消息?

最後一個問題是您正在測試的設備類型,iPod Touches沒有像iPhone那樣進行推送。

如果你身邊的一切都檢查出來,也許你應該向蘋果提交一個bug報告/功能請求。 Apple Bug Reporter從蘋果開發論壇看來,這是一個非常需要的功能。

1

我嘗試下面的代碼(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 「:」 測試消息「}}

,但我沒能獲得通知

任何幫幫我?

+2

@Kamal: 嘗試不尋常// fwrite($ apns,$ apnsMessage); 那麼你應該得到你的通知。 – 2010-02-17 03:53:48