2011-01-13 83 views
3

我一直在使用this excellent blog post嘗試從我的服務器獲取Apple推送通知。連接似乎建立良好,我可以寫信給它。但是,沒有通知到達。爲了嘗試和調試它,我想構建一個「增強的通知」,這將使APNS服務器在斷開連接之前返回錯誤代碼。但是,我不確定如何構建使用PHP發送到服務器的數據。PHP Apple增強通知

目前對我使用的,按照本教程後正常的通知:

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

這將創建格式的請求:

alt text

不過,我需要在一個請求格式:

alt text

其中,根據文檔:

標識符 - 識別此通知的任意值。如果APN無法解釋通知,則該錯誤響應數據包中將返回相同的標識符。

Expiry - 以秒(UTC)表示的固定UNIX時期日期,用於標識通知何時不再有效並可以被丟棄。到期值應按網絡順序(大端)排列。如果到期值爲正值,APN會嘗試至少發送一次通知。您可以指定零或小於零的值以請求APN根本不存儲通知。

任何有關如何調整上述代碼以使用上述增強的通知格式的幫助將非常感謝!

回答

5
$apnsMessage = 
    // new: Command "1" 
    chr(1) 
    // new: Identifier "1111" 
    . chr(1) . chr(1) . chr(1) . chr(1) 
    // new: Expiry "tomorrow" 
    . pack('N', time() + 86400) 
    // old 
    . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload; 
1
$apnsMessage = pack('CNNnH*na*', 
    1, // always one 
    intval($messageId), // sequential Id for a message 
    time() + 86400, // UTC relative timestamp + one day 
    32, // device token binary length 
    $deviceToken, // clean (no spaces, hex-only) device token 
    mb_strlen($payload, '8bit'), // payload binary length 
    $payload 
);