2011-01-13 13 views
3

私はthis excellent blog postを使用して、Apple Push Notificationを自分のサーバーから取得しようとしました。接続が正常に確立していると私はそれに書き込むことができます。ただし、通知は到着しません。それを試してデバッグするには、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が通知を解釈できない場合、この同じ識別子がエラー応答パケットに返されます。

有効期限 - 通知がもはや有効でなくなり破棄される可能性のある時間を識別する固定UNIXエポックの日付(UTC)。有効期限はネットワークオーダー(ビッグエンディアン)でなければなりません。有効期限の値が正の場合、APNは通知を少なくとも1回配信しようとします。 APNが通知をまったく格納しないようにするには、0または0より小さい値を指定します。

上記のコードを改良して上記の通知形式を改善する助けがあれば、大変感謝しています。

答えて

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 
); 
関連する問題