向APNS发送2级通知时遇到问题。 v1发送正常,但我想转到v2。以下是我实现两个版本的两种方法。我将这些与其余代码分开,以便在两者之间轻松改变。 v1工作,而v2不工作..
static function createNotificationV1($token, $payload, $id, $expireTime)
{
$msg = pack('C', 1); // v1
$msg .= pack('N', $id); // id
$msg .= pack('N', $expireTime);
$msg .= pack('n', 32) . pack('H*', $token);
$msg .= pack('n', strlen($payload)) . $payload;
return $msg;
}
static function createNotificationV2($token, $payload, $id, $expireTime)
{
$tokenItem = pack('C', 1) . pack('n', 32) . pack('H*', $token);
$payloadItem = pack('C', 2) . pack('n', strlen($payload)) . $payload;
$idItem = pack('C', 3) . pack('n', 4) . pack('N', $id);
$expireItem = pack('C', 4) . pack('n', 4) . pack('N', $expireTime);
$priorityItem = pack('C', 5) . pack('n', 1) . pack('C', 10);
$frame = $tokenItem . $payloadItem . $idItem . $expireItem . $priorityItem;
$msg = pack('C', 2); // v2
$msg .= pack('n', strlen($frame));
$msg .= $frame;
return $msg;
}
任何提示都将不胜感激。
答案 0 :(得分:3)
此代码效果很好:
$pn = pack('CnH*', 1, 32, $token)
. pack('CnA*', 2, strlen($payload), $payload)
. pack('CnA*', 3, 4, $id)
. pack('CnN', 4, 4, $expireTime)
. pack('CnC', 5, 1, 10);
$msg = pack('CN', 2, strlen($pn)) . $pn;
因为您使用的是pack('n', strlen($frame))
而不是pack('N',
答案 1 :(得分:2)
$pn = pack('CnH*', 1, 32, $sDeviceToken)
. pack('CnA*', 2, strlen($sPayload), $sPayload)
. pack('CnN', 3, 4, $nMessageID)
. pack('CnN', 4, 4, $nExpire > 0 ? time() + $nExpire : 0)
. pack('CnC', 5, 1, $priority);
$sRet = pack('CN', self::COMMAND_PUSH, strlen($pn)) . $pn;
行$ id有一个错误而不是CnA *,它需要CnN