【iPhone】APNSのペイロードサイズのチェック

APNSで日本語を送信する時、一番心配なのはペイロードサイズです。
送信ペイロードのサイズは最大で256byteとなっていて、これを超える場合は、ペイロード長エラーとなってAPNSサーバからエラーが返却されます。
今、運用しているサービスで週1回ほどでAPNSのalertを送信していますが、厄介なのは、毎回、表示メッセージが変更されること。
そこで、ペイロード生成、サイズを取得する簡単なスクリプトを用意しました。

<?php
$message     = "メッセージ"; //表示メッセージ
$responce_id = 1; //エラー時の通知ID
$action_loc_key = "アプリへ"; //ボタンラベル名

//token(64byte)を16進→バイナリ(32byte)へ
$deviceToken = pack('H64',"1111111111111111111111111111111111111111111111111111111111111111");
$responce_id = pack('N', $responce_id );
//メッセージ保存は1週間
$timeout = pack('N', time()+(7 * 24 * 60 * 60) );
//JSON生成
$payload = '{"aps":{"alert":{"body":"'. $message .'","action-loc-key":"'.$action_loc_key.'"}}}';
//ペイロードデータ作成
$msg = pack('C','1').
       $responce_id.$timeout.
       pack('n',32).                             //Token length
       $deviceToken.                             //device Token(binary)
       pack('n',strlen($payload)) .              //Payload length
       $payload;

print strlen($msg);
?>

意外とバイナリにしてゴニョゴニョするのはめんどくさいものですよね。